@@ -14,19 +14,48 @@ extension APIRequest {
14
14
let dateEncodingStrategy = self . dateEncodingStrategy ( for: payload)
15
15
SessionManager . default. upload ( multipartFormData: { multipart in
16
16
let mirror = Mirror ( reflecting: payload)
17
- mirror. children. forEach { children in
18
- if let key = children. label {
19
- switch children. value {
20
- case let v as [ Attachment ] : self . add ( v, as: key + " [] " , into: multipart)
21
- case let v as Attachment : self . add ( [ v] , as: key, into: multipart)
22
- case let v as [ Data ] : self . add ( v, as: key + " [] " , into: multipart)
23
- case let v as Data : self . add ( [ v] , as: key, into: multipart)
24
- case let v as [ Date ] : self . add ( v, as: key + " [] " , into: multipart, dateCodingStrategy: dateEncodingStrategy)
25
- case let v as Date : self . add ( [ v] , as: key, into: multipart, dateCodingStrategy: dateEncodingStrategy)
26
- case let v as [ String ] : self . add ( v, as: key + " [] " , into: multipart)
27
- case let v as String : self . add ( [ v] , as: key, into: multipart)
28
- default : self . add ( any: children. value, as: key, into: multipart)
29
- }
17
+ for children in mirror. children {
18
+ guard let key = children. label else { continue }
19
+ switch children. value {
20
+ case let v as [ Attachment ] : self . add ( v, as: key + " [] " , into: multipart)
21
+ case let v as Attachment : self . add ( [ v] , as: key, into: multipart)
22
+ case let v as [ Data ] : self . add ( v, as: key + " [] " , into: multipart)
23
+ case let v as Data : self . add ( [ v] , as: key, into: multipart)
24
+ case let v as [ Date ] : self . add ( v, as: key + " [] " , into: multipart, dateCodingStrategy: dateEncodingStrategy)
25
+ case let v as Date : self . add ( [ v] , as: key, into: multipart, dateCodingStrategy: dateEncodingStrategy)
26
+ case let v as [ String ] : self . add ( v, as: key + " [] " , into: multipart)
27
+ case let v as String : self . add ( [ v] , as: key, into: multipart)
28
+ case let v as [ UUID ] : self . add ( v, as: key + " [] " , into: multipart)
29
+ case let v as UUID : self . add ( [ v] , as: key, into: multipart)
30
+ case let v as [ UInt ] : self . add ( v. map { Int64 ( $0) } , as: key + " [] " , into: multipart)
31
+ case let v as UInt : self . add ( [ v ] . map { Int64 ( $0) } , as: key, into: multipart)
32
+ case let v as [ UInt8 ] : self . add ( v. map { Int64 ( $0) } , as: key + " [] " , into: multipart)
33
+ case let v as UInt8 : self . add ( [ v ] . map { Int64 ( $0) } , as: key, into: multipart)
34
+ case let v as [ UInt16 ] : self . add ( v. map { Int64 ( $0) } , as: key + " [] " , into: multipart)
35
+ case let v as UInt16 : self . add ( [ v ] . map { Int64 ( $0) } , as: key, into: multipart)
36
+ case let v as [ UInt32 ] : self . add ( v. map { Int64 ( $0) } , as: key + " [] " , into: multipart)
37
+ case let v as UInt32 : self . add ( [ v ] . map { Int64 ( $0) } , as: key, into: multipart)
38
+ case let v as [ UInt64 ] : self . add ( v. map { Int64 ( $0) } , as: key + " [] " , into: multipart)
39
+ case let v as UInt64 : self . add ( [ v ] . map { Int64 ( $0) } , as: key, into: multipart)
40
+ case let v as [ Int ] : self . add ( v. map { Int64 ( $0) } , as: key + " [] " , into: multipart)
41
+ case let v as Int : self . add ( [ v ] . map { Int64 ( $0) } , as: key, into: multipart)
42
+ case let v as [ Int8 ] : self . add ( v. map { Int64 ( $0) } , as: key + " [] " , into: multipart)
43
+ case let v as Int8 : self . add ( [ v ] . map { Int64 ( $0) } , as: key, into: multipart)
44
+ case let v as [ Int16 ] : self . add ( v. map { Int64 ( $0) } , as: key + " [] " , into: multipart)
45
+ case let v as Int16 : self . add ( [ v ] . map { Int64 ( $0) } , as: key, into: multipart)
46
+ case let v as [ Int32 ] : self . add ( v. map { Int64 ( $0) } , as: key + " [] " , into: multipart)
47
+ case let v as Int32 : self . add ( [ v ] . map { Int64 ( $0) } , as: key, into: multipart)
48
+ case let v as [ Int64 ] : self . add ( v, as: key + " [] " , into: multipart)
49
+ case let v as Int64 : self . add ( [ v] , as: key, into: multipart)
50
+ case let v as [ Float ] : self . add ( v, as: key + " [] " , into: multipart)
51
+ case let v as Float : self . add ( [ v] , as: key, into: multipart)
52
+ case let v as [ Double ] : self . add ( v, as: key + " [] " , into: multipart)
53
+ case let v as Double : self . add ( [ v] , as: key, into: multipart)
54
+ case let v as [ Decimal ] : self . add ( v, as: key + " [] " , into: multipart)
55
+ case let v as Decimal : self . add ( [ v] , as: key, into: multipart)
56
+ default :
57
+ guard !String( describing: type ( of: children. value) ) . contains ( " Optional " ) else { continue }
58
+ print ( " ⚠️ multipart key ` \( key) ` with ` \( type ( of: children. value) ) ` type is not supported " )
30
59
}
31
60
}
32
61
} , to: url, method: . post, headers: headers) { encodingResult in
@@ -63,11 +92,23 @@ extension APIRequest {
63
92
v. compactMap { $0. data ( using: . utf8) } . forEach { add ( [ $0] , as: key, into: multipart) }
64
93
}
65
94
66
- fileprivate func add( any: Any , as key: String , into multipart: MultipartFormData ) {
67
- if let any = any as? [ Any ] {
68
- any. forEach { add ( [ String ( describing: $0) ] , as: key, into: multipart) }
69
- } else {
70
- add ( [ String ( describing: any) ] , as: key, into: multipart)
71
- }
95
+ fileprivate func add( _ v: [ UUID ] , as key: String , into multipart: MultipartFormData ) {
96
+ add ( v. map { $0. uuidString } , as: key, into: multipart)
97
+ }
98
+
99
+ fileprivate func add( _ v: [ Int64 ] , as key: String , into multipart: MultipartFormData ) {
100
+ add ( v. map { String ( describing: $0) } , as: key, into: multipart)
101
+ }
102
+
103
+ fileprivate func add( _ v: [ Float ] , as key: String , into multipart: MultipartFormData ) {
104
+ add ( v. map { String ( describing: $0) } , as: key, into: multipart)
105
+ }
106
+
107
+ fileprivate func add( _ v: [ Double ] , as key: String , into multipart: MultipartFormData ) {
108
+ add ( v. map { String ( describing: $0) } , as: key, into: multipart)
109
+ }
110
+
111
+ fileprivate func add( _ v: [ Decimal ] , as key: String , into multipart: MultipartFormData ) {
112
+ add ( v. map { String ( describing: $0) } , as: key, into: multipart)
72
113
}
73
114
}
0 commit comments