From 9fa6c6e6617d2757e421009e65d1e3089be2cc38 Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Tue, 29 Aug 2023 12:57:31 -0700 Subject: [PATCH] impl has --- datastore/threadbackend.nim | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/datastore/threadbackend.nim b/datastore/threadbackend.nim index 9eb528b..61f0e88 100644 --- a/datastore/threadbackend.nim +++ b/datastore/threadbackend.nim @@ -50,6 +50,34 @@ proc newThreadResult*[T]( res[].signal = signal.get() ok res +proc hasTask*( + ret: TResult[bool], + tds: ThreadDatastorePtr, + kb: KeyBuffer, +) = + without key =? kb.toKey(), err: + ret[].state = Error + try: + let res = waitFor tds[].ds.has(key) + if res.isErr: + ret[].state = Error + ret[].error = res.error().toBuffer() + else: + ret[].state = Success + ret[].value = res.get() + discard ret[].signal.fireSync() + except CatchableError as err: + ret[].state = Error + ret[].error = err.toBuffer() + +proc has*( + ret: TResult[bool], + tds: ThreadDatastorePtr, + key: Key, +) = + let bkey = StringBuffer.new(key.id()) + tds[].tp.spawn hasTask(ret, tds, bkey) + proc getTask*( ret: TResult[DataBuffer], tds: ThreadDatastorePtr, @@ -72,7 +100,6 @@ proc getTask*( ret[].state = Error ret[].error = err.toBuffer() - proc get*( ret: TResult[DataBuffer], tds: ThreadDatastorePtr, @@ -103,7 +130,6 @@ proc putTask*( discard ret[].signal.fireSync() - proc put*( ret: TResult[void], tds: ThreadDatastorePtr, @@ -118,6 +144,7 @@ proc put*( tds[].tp.spawn putTask(ret, tds, bkey, bval) + proc deleteTask*( ret: TResult[void], tds: ThreadDatastorePtr,