diff --git a/datastore/databuffer.nim b/datastore/databuffer.nim index 1a5e546..de35b06 100644 --- a/datastore/databuffer.nim +++ b/datastore/databuffer.nim @@ -61,3 +61,8 @@ proc toBuffer*(err: ref Exception): CatchableErrorBuffer = return CatchableErrorBuffer( msg: StringBuffer.new(err.msg) ) + +import ./key + +proc new*(tp: typedesc[KeyBuffer], key: Key): KeyBuffer = + KeyBuffer.new(key.id()) diff --git a/datastore/memoryds.nim b/datastore/memoryds.nim index c4d735e..4a4a50c 100644 --- a/datastore/memoryds.nim +++ b/datastore/memoryds.nim @@ -8,36 +8,34 @@ import pkg/upraises import ./key import ./query import ./datastore +import ./databuffer export key, query push: {.upraises: [].} type - MemoryStore* = object - store*: Datastore - key*: Key MemoryDatastore* = ref object of Datastore - stores*: Table[Key, MemoryStore] + store*: Table[KeyBuffer, ValueBuffer] method has*( - self: MemoryDatastore, - key: Key): Future[?!bool] {.async.} = + self: MemoryDatastore, + key: Key +): Future[?!bool] {.async.} = - without mounted =? self.dispatch(key): - return failure "No mounted datastore found" - - return (await mounted.store.store.has(mounted.relative)) + let dk = KeyBuffer.new(key) + return success self.store.hasKey(dk) method delete*( - self: MemoryDatastore, - key: Key): Future[?!void] {.async.} = + self: MemoryDatastore, + key: Key +): Future[?!void] {.async.} = - without mounted =? self.dispatch(key), error: - return failure(error) - - return (await mounted.store.store.delete(mounted.relative)) + let dk = KeyBuffer.new(key) + var val: ValueBuffer + discard self.store.pop(dk, val) + return success() method delete*( self: MemoryDatastore, @@ -50,13 +48,16 @@ method delete*( return success() method get*( - self: MemoryDatastore, - key: Key): Future[?!seq[byte]] {.async.} = + self: MemoryDatastore, + key: Key +): Future[?!seq[byte]] {.async.} = - without mounted =? self.dispatch(key), error: - return failure(error) - - return await mounted.store.store.get(mounted.relative) + let dk = KeyBuffer.new(key) + if self.store.hasKey(dk): + let res = self.store[dk] + return success res.toSeq(byte) + else: + return failure (ref DatastoreError)(msg: "no such key") method put*( self: MemoryDatastore,