Layered Data
public protocol Layerable {
func idLayer() -> String
func typeLayer() -> String?
func metaLayer() -> [String: String]?
func valueLayer() -> Data
}
link |
Stars: 1 |
Last commit: 2 years ago |
struct User: Layerable, Codable, Equatable {
var id = UUID().uuidString
var name: String
var isRegistered: Bool
func idLayer() -> String {
id
}
func typeLayer() -> String? {
"\(User.self).\(isRegistered ? "Registered" : "Anon")"
}
func metaLayer() -> [String : String]? {
["tag": (name == "Anon") ? "0" : "1"]
}
func valueLayer() -> Data {
name.data(using: .utf8)!
}
}
var stash = OnionStash<User>()
let someUser = User(name: "Leif", isRegistered: true)
stash.add(value: someUser)
stash.add(value: someUser)
stash.add(value: someUser)
XCTAssertEqual(stash.onions.count, 1)
XCTAssertNotNil(stash.onion(forID: someUser.id))
stash.add(
values: (0 ..< 99999)
.map { i in User(name: "Anon", isRegistered: i.isMultiple(of: 2)) }
)
XCTAssertEqual(stash.onions.count, 100000)
XCTAssertEqual(stash.onions(forType: "User.Registered").count, 50001)
var bank = OnionBank(
stashableOnionTypes: OnionStash<A>.self, OnionStash<B>.self
)
XCTAssertEqual(bank.all.count, 2)
bank.add(value: A(value: "First Bank Value"))
try! bank.save()
var loadedBank = OnionBank(
stashableOnionTypes: OnionStash<A>.self, OnionStash<B>.self
)
dump(loadedBank)
XCTAssertEqual((loadedBank.all[0] as? OnionStash<A>)?.onionSet.count, 1)
try! bank.deleteAll()
XCTAssertEqual(bank.all.count, 2)
XCTAssertEqual((bank.all[0] as? OnionStash<A>)?.onionSet.count, 0)
try! loadedBank.load()
XCTAssertEqual(loadedBank.all.count, 2)
XCTAssertEqual((loadedBank.all[0] as? OnionStash<A>)?.onionSet.count, 0)
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics