-
-
Notifications
You must be signed in to change notification settings - Fork 69
/
Copy pathBatchUtils.swift
57 lines (47 loc) · 2.14 KB
/
BatchUtils.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//
// RESTBatchCommand.swift
// ParseSwift
//
// Created by Florent Vilmart on 17-08-19.
// Copyright © 2020 Parse Community. All rights reserved.
//
import Foundation
typealias ParseObjectBatchCommand<T> = BatchCommand<T, T> where T: ParseObject
typealias ParseObjectBatchResponse<T> = [(Result<T, ParseError>)]
// swiftlint:disable line_length
typealias RESTBatchCommandType<T> = API.Command<ParseObjectBatchCommand<T>, ParseObjectBatchResponse<T>> where T: ParseObject
typealias ParseObjectBatchCommandNoBody<T> = BatchCommandEncodable<NoBody, NoBody>
typealias ParseObjectBatchResponseNoBody<NoBody> = [(Result<Void, ParseError>)]
typealias RESTBatchCommandNoBodyType<T> = API.NonParseBodyCommand<ParseObjectBatchCommandNoBody<T>, ParseObjectBatchResponseNoBody<T>> where T: Encodable
typealias ParseObjectBatchCommandEncodablePointer<T> = BatchChildCommand<T, PointerType> where T: Encodable
typealias ParseObjectBatchResponseEncodablePointer<U> = [(Result<PointerType, ParseError>)]
typealias RESTBatchCommandTypeEncodablePointer<T> = API.NonParseBodyCommand<ParseObjectBatchCommandEncodablePointer<T>, ParseObjectBatchResponseEncodablePointer<Encodable>> where T: Encodable
// swiftlint:enable line_length
internal struct BatchCommand<T, U>: ParseEncodable where T: ParseEncodable {
let requests: [API.Command<T, U>]
var transaction: Bool
}
internal struct BatchCommandEncodable<T, U>: Encodable where T: Encodable {
let requests: [API.NonParseBodyCommand<T, U>]
var transaction: Bool
}
internal struct BatchChildCommand<T, U>: Encodable where T: Encodable {
let requests: [API.BatchCommand<T, U>]
var transaction: Bool
}
struct BatchUtils {
static func splitArray<U>(_ array: [U], valuesPerSegment: Int) -> [[U]] {
if array.count < valuesPerSegment {
return [array]
}
var returnArray = [[U]]()
var index = 0
while index < array.count {
let length = Swift.min(array.count - index, valuesPerSegment)
let subArray = Array(array[index..<index+length])
returnArray.append(subArray)
index += length
}
return returnArray
}
}