From e592aaf74e31fd1e3b9021133c9e12b3f9e4eda1 Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Thu, 24 Aug 2023 16:02:13 -0700 Subject: [PATCH] updating items --- datastore/threadbackend.nim | 105 ++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 datastore/threadbackend.nim diff --git a/datastore/threadbackend.nim b/datastore/threadbackend.nim new file mode 100644 index 0000000..57a245d --- /dev/null +++ b/datastore/threadbackend.nim @@ -0,0 +1,105 @@ +import std/tables + +import pkg/chronos +import pkg/questionable +import pkg/questionable/results +import pkg/upraises + +import ./key +import ./query +import ./datastore +import ./databuffer + +export key, query + +push: {.upraises: [].} + +type + ThreadDatastore* = ref object of Datastore + # stores*: Table[KeyBuffer, ThreadDatastore] + +proc has*( + self: ThreadDatastore, + key: KeyBuffer +): Future[?!bool] {.async.} = + + # without mounted =? self.dispatch(key): + # return failure "No mounted datastore found" + # return (await mounted.store.store.has(mounted.relative)) + return success(true) + +proc delete*( + self: ThreadDatastore, + key: KeyBuffer +): Future[?!void] {.async.} = + + # without mounted =? self.dispatch(key), error: + # return failure(error) + # return (await mounted.store.store.delete(mounted.relative)) + return success() + +proc delete*( + self: ThreadDatastore, + keys: seq[KeyBuffer] +): Future[?!void] {.async.} = + + # for key in keys: + # if err =? (await self.delete(key)).errorOption: + # return failure err + + return success() + +proc get*( + self: ThreadDatastore, + key: KeyBuffer +): Future[?!DataBuffer] {.async.} = + + # without mounted =? self.dispatch(key), error: + # return failure(error) + + # return await mounted.store.store.get(mounted.relative) + return success(DataBuffer.new()) + +proc put*( + self: ThreadDatastore, + key: KeyBuffer, + data: DataBuffer +): Future[?!void] {.async.} = + + # without mounted =? self.dispatch(key), error: + # return failure(error) + + # return (await mounted.store.store.put(mounted.relative, data)) + return success() + +proc put*( + self: ThreadDatastore, + batch: seq[BatchEntry] +): Future[?!void] {.async.} = + + for entry in batch: + if err =? (await self.put(entry.key, entry.data)).errorOption: + return failure err + + return success() + +proc close*( + self: ThreadDatastore +): Future[?!void] {.async.} = + + # for s in self.stores.values: + # discard await s.store.close() + + # TODO: how to handle failed close? + return success() + +func new*[S: ref Datastore]( + T: typedesc[ThreadDatastore], + storeTp: typedesc[S] +): ?!ThreadDatastore = + + var self = T() + # for (k, v) in stores.pairs: + # self.stores[?k.path] = MountedStore(store: v, key: k) + + success self