Skip to content

Commit e11e4aa

Browse files
Merge pull request #19 from FelixHerrmann/feature/expose-underlying-data-construction
[Feature] Expose Underlying Data Construction
2 parents 0db9e38 + 8381e2c commit e11e4aa

15 files changed

+55
-55
lines changed

Sources/MultipartFormData/Boundary.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,18 +92,19 @@ extension Boundary {
9292
}
9393
}
9494

95-
// MARK: - Debug
95+
// MARK: - CustomDebugStringConvertible
9696

9797
extension Boundary: CustomDebugStringConvertible {
9898
public var debugDescription: String {
99-
return _value
99+
return rawValue
100100
}
101101
}
102102

103-
// MARK: - Helpers
103+
// MARK: - Data
104104

105105
extension Boundary {
106-
internal var _value: String {
106+
/// The raw string representation of a boundary.
107+
public var rawValue: String {
107108
return String(bytes: _asciiData, encoding: .ascii) ?? ""
108109
}
109110
}

Sources/MultipartFormData/ContentType.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public struct ContentType: HTTPHeaderField {
1111
public static let name: String = "Content-Type"
1212

1313
public var value: String {
14-
return mediaType._text
14+
return mediaType.rawValue
1515
}
1616

1717
/// The media type (MIME type) of the content type.
@@ -36,6 +36,6 @@ public struct ContentType: HTTPHeaderField {
3636
extension ContentType {
3737
internal init(boundary: Boundary) {
3838
self.mediaType = .multipartFormData
39-
self.parameters = [HTTPHeaderParameter("boundary", value: boundary._value)]
39+
self.parameters = [HTTPHeaderParameter("boundary", value: boundary.rawValue)]
4040
}
4141
}

Sources/MultipartFormData/HTTPHeaderField.swift

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,30 +24,31 @@ public protocol HTTPHeaderField: Sendable, Hashable, CustomDebugStringConvertibl
2424
var parameters: [HTTPHeaderParameter] { get set }
2525
}
2626

27-
// MARK: - Debug
27+
// MARK: - CustomDebugStringConvertible
2828

2929
extension HTTPHeaderField {
3030
/// A textual representation of this instance, suitable for debugging.
3131
public var debugDescription: String {
32-
return _text
32+
return rawValue
3333
}
3434
}
3535

36-
// MARK: - Helpers
36+
// MARK: - Data
3737

3838
extension HTTPHeaderField {
39-
internal var _value: String {
40-
if parameters.isEmpty {
41-
return value
42-
}
43-
return "\(value); \(parameters._text)"
39+
/// The actual header field value resulting from ``value`` and ``parameters``.
40+
public var parameterizedValue: String {
41+
if parameters.isEmpty { return value }
42+
return "\(value); \(parameters.rawValue)"
4443
}
4544

46-
internal var _text: String {
47-
return "\(Self.name): \(_value)"
45+
/// The raw string representation of a header field.
46+
public var rawValue: String {
47+
return "\(Self.name): \(parameterizedValue)"
4848
}
4949

50-
internal var _data: Data {
51-
return Data(_text.utf8)
50+
/// The data representation of a header field.
51+
public var data: Data {
52+
return Data(rawValue.utf8)
5253
}
5354
}

Sources/MultipartFormData/HTTPHeaderParameter.swift

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,26 @@ public struct HTTPHeaderParameter: Sendable, Hashable {
2424
}
2525
}
2626

27-
// MARK: - Debug
27+
// MARK: - CustomDebugStringConvertible
2828

2929
extension HTTPHeaderParameter: CustomDebugStringConvertible {
3030
public var debugDescription: String {
31-
return _text
31+
return rawValue
3232
}
3333
}
3434

35-
// MARK: - Helpers
35+
// MARK: - Data
3636

3737
extension HTTPHeaderParameter {
38-
internal var _text: String {
38+
/// The raw string representation of a header parameter.
39+
public var rawValue: String {
3940
return "\(name)=\"\(value)\""
4041
}
4142
}
4243

4344
extension Array<HTTPHeaderParameter> {
44-
internal var _text: String {
45-
return map(\._text).joined(separator: "; ")
45+
/// The raw string representation of multiple header parameters.
46+
public var rawValue: String {
47+
return map(\.rawValue).joined(separator: "; ")
4648
}
4749
}

Sources/MultipartFormData/MediaType.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,23 +87,24 @@ extension UTType {
8787
/// - Parameter mediaType: The media type.
8888
/// - Parameter supertype: Another UTType instance that the resulting type must conform to; for example, UTTypeData.
8989
public init?(mediaType: MediaType, conformingTo supertype: UTType = .data) {
90-
self.init(mimeType: mediaType._text, conformingTo: supertype)
90+
self.init(mimeType: mediaType.rawValue, conformingTo: supertype)
9191
}
9292
}
9393
#endif
9494

95-
// MARK: - Debug
95+
// MARK: - CustomDebugStringConvertible
9696

9797
extension MediaType: CustomDebugStringConvertible {
9898
public var debugDescription: String {
99-
return _text
99+
return rawValue
100100
}
101101
}
102102

103-
// MARK: - Helpers
103+
// MARK: - Data
104104

105105
extension MediaType {
106-
internal var _text: String {
106+
/// The raw string representation of a media type.
107+
public var rawValue: String {
107108
return "\(type)/\(subtype)"
108109
}
109110
}

Sources/MultipartFormData/MultipartFormData.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ extension MultipartFormData {
116116
/// This combines all the data from the subparts into one big data object.
117117
public var httpBody: Data {
118118
let bodyData: Data = body
119-
.map { ._dash + boundary._asciiData + ._crlf + $0._data + ._crlf }
119+
.map { ._dash + boundary._asciiData + ._crlf + $0.data + ._crlf }
120120
.reduce(Data(), +)
121121
return bodyData + ._dash + boundary._asciiData + ._dash + ._crlf
122122
}
@@ -158,11 +158,11 @@ extension MultipartFormData {
158158
}
159159
}
160160

161-
// MARK: - Debug
161+
// MARK: - CustomDebugStringConvertible
162162

163163
extension MultipartFormData: CustomDebugStringConvertible {
164164
public var debugDescription: String {
165-
let bytes: Data = contentType._data + ._crlf + ._crlf + httpBody
165+
let bytes: Data = contentType.data + ._crlf + ._crlf + httpBody
166166
return String(bytes: bytes, encoding: .utf8) ?? ""
167167
}
168168
}

Sources/MultipartFormData/Subpart.swift

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,19 +76,20 @@ extension Subpart {
7676
}
7777
}
7878

79-
// MARK: - Debug
79+
// MARK: - CustomDebugStringConvertible
8080

8181
extension Subpart: CustomDebugStringConvertible {
8282
public var debugDescription: String {
83-
return String(bytes: _data, encoding: .utf8) ?? ""
83+
return String(bytes: data, encoding: .utf8) ?? ""
8484
}
8585
}
8686

87-
// MARK: - Helpers
87+
// MARK: - Data
8888

8989
extension Subpart {
90-
internal var _data: Data {
91-
let contentTypeData: Data = contentType.map { $0._data + ._crlf } ?? Data()
92-
return contentDisposition._data + ._crlf + contentTypeData + ._crlf + body
90+
/// The data representation of a subpart.
91+
public var data: Data {
92+
let contentTypeData: Data = contentType.map { $0.data + ._crlf } ?? Data()
93+
return contentDisposition.data + ._crlf + contentTypeData + ._crlf + body
9394
}
9495
}

Sources/MultipartFormData/URLRequest+MultipartFormData.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@ extension URLRequest {
3333
/// Updates the corresponding header field with a``HTTPHeaderField`` object.
3434
/// - Parameter headerField: The new header field object.
3535
public mutating func updateHeaderField<Field: HTTPHeaderField>(with headerField: Field) {
36-
setValue(headerField._value, forHTTPHeaderField: Field.name)
36+
setValue(headerField.parameterizedValue, forHTTPHeaderField: Field.name)
3737
}
3838
}

Tests/MultipartFormDataTests/BoundaryTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ final class BoundaryTests: XCTestCase {
4545
let randomBoundary = Boundary.random()
4646
let asciiString = String(data: randomBoundary._asciiData, encoding: .ascii)
4747
XCTAssertNotNil(asciiString)
48-
XCTAssertEqual(asciiString, randomBoundary._value)
48+
XCTAssertEqual(asciiString, randomBoundary.rawValue)
4949
}
5050
}
5151

Tests/MultipartFormDataTests/ContentDispositionTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,6 @@ final class ContentDispositionTests: XCTestCase {
3939

4040
func testData() throws {
4141
let contentDisposition = ContentDisposition(name: "a", filename: "a")
42-
XCTAssertEqual(contentDisposition._data, Data("Content-Disposition: form-data; name=\"a\"; filename=\"a\"".utf8))
42+
XCTAssertEqual(contentDisposition.data, Data("Content-Disposition: form-data; name=\"a\"; filename=\"a\"".utf8))
4343
}
4444
}

0 commit comments

Comments
 (0)