This repository has been archived by the owner. It is now read-only.
Permalink
Cannot retrieve contributors at this time
75 lines (60 sloc)
2.59 KB
| /* This Source Code Form is subject to the terms of the Mozilla Public | |
| * License, v. 2.0. If a copy of the MPL was not distributed with this | |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
| import Foundation | |
| import Shared | |
| import SwiftyJSON | |
| open class InfoCollections { | |
| fileprivate let collections: [String: Timestamp] | |
| init(collections: [String: Timestamp]) { | |
| self.collections = collections | |
| } | |
| open class func fromJSON(_ json: JSON) -> InfoCollections? { | |
| if let dict = json.dictionary { | |
| var coll = [String: Timestamp]() | |
| for (key, value) in dict { | |
| if let value = value.double { | |
| coll[key] = Timestamp(value * 1000) | |
| } else { | |
| return nil // Invalid, so bail out. | |
| } | |
| } | |
| return InfoCollections(collections: coll) | |
| } | |
| return nil | |
| } | |
| open func collectionNames() -> [String] { | |
| return Array(self.collections.keys) | |
| } | |
| open func modified(_ collection: String) -> Timestamp? { | |
| return self.collections[collection] | |
| } | |
| // Two I/Cs are the same if they have the same modified times for a set of | |
| // collections. If no collections are specified, they're considered the same | |
| // if the other I/C has the same values for this I/C's collections, and | |
| // they have the same collection array. | |
| open func same(_ other: InfoCollections, collections: [String]?) -> Bool { | |
| if let collections = collections { | |
| return collections.every({ self.modified($0) == other.modified($0) }) | |
| } | |
| // Same collections? | |
| let ours = self.collectionNames() | |
| let theirs = other.collectionNames() | |
| return ours.sameElements(theirs) && same(other, collections: ours) | |
| } | |
| } | |
| // Response object from https://<sync-endpoint-url>/info/configuration | |
| public struct InfoConfiguration { | |
| // Maximum size in bytes of the overall HTTP request body. | |
| public let maxRequestBytes: Int | |
| // Maximum number of records that can be uploaded to a collection in a single POST request. | |
| public let maxPostRecords: Int | |
| // Maximum combined size in bytes of the record payloads that can be uploaded to a collection in | |
| // a single POST request. | |
| public let maxPostBytes: Int | |
| // Maximum total number of records that can be uploaded to a collection as part of a batched upload. | |
| public let maxTotalRecords: Int | |
| // Maximum total combined size in bytes of the record payloads that can be uploaded to a collection | |
| // as part of a batched upload. | |
| public let maxTotalBytes: Int | |
| } | |