@@ -75,6 +75,7 @@ struct Documents {
7575 _ document: Data ,
7676 _ primaryKey: String ? ,
7777 _ completion: @escaping ( Result < Update , Swift . Error > ) -> Void ) {
78+
7879 var query : String = " /indexes/ \( UID) /documents "
7980 if let primaryKey: String = primaryKey {
8081 query += " ?primaryKey= \( primaryKey) "
@@ -94,6 +95,42 @@ struct Documents {
9495 }
9596 }
9697
98+ func add< T> (
99+ _ UID: String ,
100+ _ documents: [ T ] ,
101+ _ encoder: JSONEncoder ? = nil ,
102+ _ primaryKey: String ? ,
103+ _ completion: @escaping ( Result < Update , Swift . Error > ) -> Void ) where T: Encodable {
104+
105+ var query : String = " /indexes/ \( UID) /documents "
106+ if let primaryKey: String = primaryKey {
107+ query += " ?primaryKey= \( primaryKey) "
108+ }
109+
110+ let data : Data !
111+
112+ switch encodeJSON ( documents, encoder) {
113+ case . success( let documentData) :
114+ data = documentData
115+ case . failure( let error) :
116+ completion ( . failure( error) )
117+ return
118+ }
119+
120+ request. post ( api: query, data) { result in
121+
122+ switch result {
123+ case . success( let data) :
124+
125+ Documents . decodeJSON ( data, completion: completion)
126+
127+ case . failure( let error) :
128+ completion ( . failure( error) )
129+ }
130+
131+ }
132+ }
133+
97134 func update(
98135 _ UID: String ,
99136 _ document: Data ,
@@ -217,4 +254,16 @@ struct Documents {
217254 }
218255 }
219256
257+ private func encodeJSON< T: Encodable > (
258+ _ documents: [ T ] ,
259+ _ encoder: JSONEncoder ? ) -> Result < Data , Swift . Error > {
260+ do {
261+ let data : Data = try ( encoder ?? Constants . customJSONEecoder)
262+ . encode ( documents)
263+ return . success( data)
264+ } catch {
265+ return . failure( error)
266+ }
267+ }
268+
220269}
0 commit comments