Skip to content

Commit 7ff47dc

Browse files
authored
[swift5]: support arrays in multipart/form-data (#13383)
* [swift5]: support arrays in multipart/form-data * update samples
1 parent 0727407 commit 7ff47dc

File tree

17 files changed

+606
-572
lines changed

17 files changed

+606
-572
lines changed

modules/openapi-generator/src/main/resources/swift5/libraries/alamofire/AlamofireImplementations.mustache

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -103,23 +103,25 @@ private var managerStore = SynchronizedDictionary<String, Alamofire.Session>()
103103
104104
let upload = manager.upload(multipartFormData: { mpForm in
105105
for (k, v) in self.parameters! {
106-
switch v {
107-
case let fileURL as URL:
108-
if let mimeType = self.contentTypeForFormPart(fileURL: fileURL) {
109-
mpForm.append(fileURL, withName: k, fileName: fileURL.lastPathComponent, mimeType: mimeType)
110-
} else {
111-
mpForm.append(fileURL, withName: k)
106+
for v in (v as? Array ?? [v]) {
107+
switch v {
108+
case let fileURL as URL:
109+
if let mimeType = self.contentTypeForFormPart(fileURL: fileURL) {
110+
mpForm.append(fileURL, withName: k, fileName: fileURL.lastPathComponent, mimeType: mimeType)
111+
} else {
112+
mpForm.append(fileURL, withName: k)
113+
}
114+
case let string as String:
115+
mpForm.append(string.data(using: String.Encoding.utf8)!, withName: k)
116+
case let number as NSNumber:
117+
mpForm.append(number.stringValue.data(using: String.Encoding.utf8)!, withName: k)
118+
case let data as Data:
119+
mpForm.append(data, withName: k)
120+
case let uuid as UUID:
121+
mpForm.append(uuid.uuidString.data(using: String.Encoding.utf8)!, withName: k)
122+
default:
123+
fatalError("Unprocessable value \(v) with key \(k)")
112124
}
113-
case let string as String:
114-
mpForm.append(string.data(using: String.Encoding.utf8)!, withName: k)
115-
case let number as NSNumber:
116-
mpForm.append(number.stringValue.data(using: String.Encoding.utf8)!, withName: k)
117-
case let data as Data:
118-
mpForm.append(data, withName: k)
119-
case let uuid as UUID:
120-
mpForm.append(uuid.uuidString.data(using: String.Encoding.utf8)!, withName: k)
121-
default:
122-
fatalError("Unprocessable value \(v) with key \(k)")
123125
}
124126
}
125127
}, to: URLString, method: xMethod, headers: nil)

modules/openapi-generator/src/main/resources/swift5/libraries/urlsession/URLSessionImplementations.mustache

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -455,60 +455,62 @@ private class FormDataEncoding: ParameterEncoding {
455455
urlRequest.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
456456

457457
for (key, value) in parameters {
458-
switch value {
459-
case let fileURL as URL:
458+
for value in (value as? Array ?? [value]) {
459+
switch value {
460+
case let fileURL as URL:
460461
461-
urlRequest = try configureFileUploadRequest(
462-
urlRequest: urlRequest,
463-
boundary: boundary,
464-
name: key,
465-
fileURL: fileURL
466-
)
467-
468-
case let string as String:
469-
470-
if let data = string.data(using: .utf8) {
471-
urlRequest = configureDataUploadRequest(
462+
urlRequest = try configureFileUploadRequest(
472463
urlRequest: urlRequest,
473464
boundary: boundary,
474465
name: key,
475-
data: data
466+
fileURL: fileURL
476467
)
477-
}
478468
479-
case let number as NSNumber:
469+
case let string as String:
480470
481-
if let data = number.stringValue.data(using: .utf8) {
482-
urlRequest = configureDataUploadRequest(
483-
urlRequest: urlRequest,
484-
boundary: boundary,
485-
name: key,
486-
data: data
487-
)
488-
}
471+
if let data = string.data(using: .utf8) {
472+
urlRequest = configureDataUploadRequest(
473+
urlRequest: urlRequest,
474+
boundary: boundary,
475+
name: key,
476+
data: data
477+
)
478+
}
489479

490-
case let data as Data:
480+
case let number as NSNumber:
491481

492-
urlRequest = configureDataUploadRequest(
493-
urlRequest: urlRequest,
494-
boundary: boundary,
495-
name: key,
496-
data: data
497-
)
482+
if let data = number.stringValue.data(using: .utf8) {
483+
urlRequest = configureDataUploadRequest(
484+
urlRequest: urlRequest,
485+
boundary: boundary,
486+
name: key,
487+
data: data
488+
)
489+
}
498490

499-
case let uuid as UUID:
491+
case let data as Data:
500492

501-
if let data = uuid.uuidString.data(using: .utf8) {
502493
urlRequest = configureDataUploadRequest(
503494
urlRequest: urlRequest,
504495
boundary: boundary,
505496
name: key,
506497
data: data
507498
)
508-
}
509499

510-
default:
511-
fatalError("Unprocessable value \(value) with key \(key)")
500+
case let uuid as UUID:
501+
502+
if let data = uuid.uuidString.data(using: .utf8) {
503+
urlRequest = configureDataUploadRequest(
504+
urlRequest: urlRequest,
505+
boundary: boundary,
506+
name: key,
507+
data: data
508+
)
509+
}
510+
511+
default:
512+
fatalError("Unprocessable value \(value) with key \(key)")
513+
}
512514
}
513515
}
514516

samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -103,23 +103,25 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
103103

104104
let upload = manager.upload(multipartFormData: { mpForm in
105105
for (k, v) in self.parameters! {
106-
switch v {
107-
case let fileURL as URL:
108-
if let mimeType = self.contentTypeForFormPart(fileURL: fileURL) {
109-
mpForm.append(fileURL, withName: k, fileName: fileURL.lastPathComponent, mimeType: mimeType)
110-
} else {
111-
mpForm.append(fileURL, withName: k)
106+
for v in (v as? Array ?? [v]) {
107+
switch v {
108+
case let fileURL as URL:
109+
if let mimeType = self.contentTypeForFormPart(fileURL: fileURL) {
110+
mpForm.append(fileURL, withName: k, fileName: fileURL.lastPathComponent, mimeType: mimeType)
111+
} else {
112+
mpForm.append(fileURL, withName: k)
113+
}
114+
case let string as String:
115+
mpForm.append(string.data(using: String.Encoding.utf8)!, withName: k)
116+
case let number as NSNumber:
117+
mpForm.append(number.stringValue.data(using: String.Encoding.utf8)!, withName: k)
118+
case let data as Data:
119+
mpForm.append(data, withName: k)
120+
case let uuid as UUID:
121+
mpForm.append(uuid.uuidString.data(using: String.Encoding.utf8)!, withName: k)
122+
default:
123+
fatalError("Unprocessable value \(v) with key \(k)")
112124
}
113-
case let string as String:
114-
mpForm.append(string.data(using: String.Encoding.utf8)!, withName: k)
115-
case let number as NSNumber:
116-
mpForm.append(number.stringValue.data(using: String.Encoding.utf8)!, withName: k)
117-
case let data as Data:
118-
mpForm.append(data, withName: k)
119-
case let uuid as UUID:
120-
mpForm.append(uuid.uuidString.data(using: String.Encoding.utf8)!, withName: k)
121-
default:
122-
fatalError("Unprocessable value \(v) with key \(k)")
123125
}
124126
}
125127
}, to: URLString, method: xMethod, headers: nil)

samples/client/petstore/swift5/asyncAwaitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -455,60 +455,62 @@ private class FormDataEncoding: ParameterEncoding {
455455
urlRequest.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
456456

457457
for (key, value) in parameters {
458-
switch value {
459-
case let fileURL as URL:
458+
for value in (value as? Array ?? [value]) {
459+
switch value {
460+
case let fileURL as URL:
460461

461-
urlRequest = try configureFileUploadRequest(
462-
urlRequest: urlRequest,
463-
boundary: boundary,
464-
name: key,
465-
fileURL: fileURL
466-
)
467-
468-
case let string as String:
469-
470-
if let data = string.data(using: .utf8) {
471-
urlRequest = configureDataUploadRequest(
462+
urlRequest = try configureFileUploadRequest(
472463
urlRequest: urlRequest,
473464
boundary: boundary,
474465
name: key,
475-
data: data
466+
fileURL: fileURL
476467
)
477-
}
478468

479-
case let number as NSNumber:
469+
case let string as String:
480470

481-
if let data = number.stringValue.data(using: .utf8) {
482-
urlRequest = configureDataUploadRequest(
483-
urlRequest: urlRequest,
484-
boundary: boundary,
485-
name: key,
486-
data: data
487-
)
488-
}
471+
if let data = string.data(using: .utf8) {
472+
urlRequest = configureDataUploadRequest(
473+
urlRequest: urlRequest,
474+
boundary: boundary,
475+
name: key,
476+
data: data
477+
)
478+
}
489479

490-
case let data as Data:
480+
case let number as NSNumber:
491481

492-
urlRequest = configureDataUploadRequest(
493-
urlRequest: urlRequest,
494-
boundary: boundary,
495-
name: key,
496-
data: data
497-
)
482+
if let data = number.stringValue.data(using: .utf8) {
483+
urlRequest = configureDataUploadRequest(
484+
urlRequest: urlRequest,
485+
boundary: boundary,
486+
name: key,
487+
data: data
488+
)
489+
}
498490

499-
case let uuid as UUID:
491+
case let data as Data:
500492

501-
if let data = uuid.uuidString.data(using: .utf8) {
502493
urlRequest = configureDataUploadRequest(
503494
urlRequest: urlRequest,
504495
boundary: boundary,
505496
name: key,
506497
data: data
507498
)
508-
}
509499

510-
default:
511-
fatalError("Unprocessable value \(value) with key \(key)")
500+
case let uuid as UUID:
501+
502+
if let data = uuid.uuidString.data(using: .utf8) {
503+
urlRequest = configureDataUploadRequest(
504+
urlRequest: urlRequest,
505+
boundary: boundary,
506+
name: key,
507+
data: data
508+
)
509+
}
510+
511+
default:
512+
fatalError("Unprocessable value \(value) with key \(key)")
513+
}
512514
}
513515
}
514516

samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -455,60 +455,62 @@ private class FormDataEncoding: ParameterEncoding {
455455
urlRequest.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
456456

457457
for (key, value) in parameters {
458-
switch value {
459-
case let fileURL as URL:
458+
for value in (value as? Array ?? [value]) {
459+
switch value {
460+
case let fileURL as URL:
460461

461-
urlRequest = try configureFileUploadRequest(
462-
urlRequest: urlRequest,
463-
boundary: boundary,
464-
name: key,
465-
fileURL: fileURL
466-
)
467-
468-
case let string as String:
469-
470-
if let data = string.data(using: .utf8) {
471-
urlRequest = configureDataUploadRequest(
462+
urlRequest = try configureFileUploadRequest(
472463
urlRequest: urlRequest,
473464
boundary: boundary,
474465
name: key,
475-
data: data
466+
fileURL: fileURL
476467
)
477-
}
478468

479-
case let number as NSNumber:
469+
case let string as String:
480470

481-
if let data = number.stringValue.data(using: .utf8) {
482-
urlRequest = configureDataUploadRequest(
483-
urlRequest: urlRequest,
484-
boundary: boundary,
485-
name: key,
486-
data: data
487-
)
488-
}
471+
if let data = string.data(using: .utf8) {
472+
urlRequest = configureDataUploadRequest(
473+
urlRequest: urlRequest,
474+
boundary: boundary,
475+
name: key,
476+
data: data
477+
)
478+
}
489479

490-
case let data as Data:
480+
case let number as NSNumber:
491481

492-
urlRequest = configureDataUploadRequest(
493-
urlRequest: urlRequest,
494-
boundary: boundary,
495-
name: key,
496-
data: data
497-
)
482+
if let data = number.stringValue.data(using: .utf8) {
483+
urlRequest = configureDataUploadRequest(
484+
urlRequest: urlRequest,
485+
boundary: boundary,
486+
name: key,
487+
data: data
488+
)
489+
}
498490

499-
case let uuid as UUID:
491+
case let data as Data:
500492

501-
if let data = uuid.uuidString.data(using: .utf8) {
502493
urlRequest = configureDataUploadRequest(
503494
urlRequest: urlRequest,
504495
boundary: boundary,
505496
name: key,
506497
data: data
507498
)
508-
}
509499

510-
default:
511-
fatalError("Unprocessable value \(value) with key \(key)")
500+
case let uuid as UUID:
501+
502+
if let data = uuid.uuidString.data(using: .utf8) {
503+
urlRequest = configureDataUploadRequest(
504+
urlRequest: urlRequest,
505+
boundary: boundary,
506+
name: key,
507+
data: data
508+
)
509+
}
510+
511+
default:
512+
fatalError("Unprocessable value \(value) with key \(key)")
513+
}
512514
}
513515
}
514516

0 commit comments

Comments
 (0)