PROTOCOL
StorageDriver
Abstract Storage Driver API
Describes both permanent (database, filesystem) and temporary (cache, memory) storage methods. SDK actively uses both storage strategies distinguished by name: * storage - permanent storage * cache - temporary storage
Example
await write(driver: storage, meta: StorageMeta(room: "323", topic: "dinner"), data: try serialize([ "foo": "boo" ]))
let supperTry1 = await read(driver: storage, meta: StorageMeta(room: "323", topic: "supper"))
XCTAssertEqual(supperTry1.flatMap({ try? deserialize([String : String].self, $0) }), [ "boo": "woo" ])
let supperTry2 = await read(driver: storage, meta: StorageMeta(room: "323", topic: "supper"))
XCTAssertEqual(supperTry2.flatMap({ try? deserialize([String : String].self, $0) }), [ "boo": "woo" ])
let dinnerTry1 = await take(driver: storage, meta: StorageMeta(room: "323", topic: "dinner"))
XCTAssertEqual(dinnerTry1.flatMap({ try? deserialize([String : String].self, $0) }), [ "foo": "boo" ])
let dinnerTry2 = await take(driver: storage, meta: StorageMeta(room: "323", topic: "dinner"))
XCTAssertEqual(dinnerTry2.flatMap({ try? deserialize([String : String].self, $0) }), nil)
Methods
write(meta:data:)
Write a unit of data into storage, uniquely identified by meta
If such unit of data already exists it is silently overwritten
Parameters
Name | Description |
---|---|
meta | StorageMeta composite identifier |
data | StorageData unit of data to insert |
Returns
void
read(meta:)
Read data stored under provided meta
This method is typically used in permanent storage strategy
Parameters
Name | Description |
---|---|
meta | StorageMeta composite identifier |
Returns
StorageData
stored data (StorageData
), or null if not found
take(meta:)
Take data stored under provided meta and remove original
This method is typically used in temporary storage strategy and as a mean to delete stored entry
Parameters
Name | Description |
---|---|
meta | StorageMeta composite identifier |
Returns
StorageData
stored data (StorageData
), or null if not found