mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-04 14:43:12 +00:00
change TResult to case type
This commit is contained in:
parent
485f2ecaed
commit
9e0b976f38
@ -26,10 +26,14 @@ type
|
||||
Error
|
||||
|
||||
ThreadResult*[T: DataBuffer | void | bool | ThreadDatastorePtr] = object
|
||||
state*: ThreadResultKind
|
||||
signal*: ThreadSignalPtr
|
||||
value*: T
|
||||
error*: CatchableErrorBuffer
|
||||
case state*: ThreadResultKind
|
||||
of ThreadResultKind.NotReady:
|
||||
discard
|
||||
of ThreadResultKind.Success:
|
||||
value*: T
|
||||
of ThreadResultKind.Error:
|
||||
error*: CatchableErrorBuffer
|
||||
|
||||
TResult*[T] = SharedPtr[ThreadResult[T]]
|
||||
|
||||
@ -50,25 +54,37 @@ proc newThreadResult*[T](
|
||||
res[].signal = signal.get()
|
||||
ok res
|
||||
|
||||
proc success*[T](ret: TResult[T], value: T) =
|
||||
{.cast(uncheckedAssign).}:
|
||||
ret[].state = ThreadResultKind.Success
|
||||
ret[].value = value
|
||||
|
||||
proc success*[T: void](ret: TResult[T]) =
|
||||
{.cast(uncheckedAssign).}:
|
||||
ret[].state = ThreadResultKind.Success
|
||||
|
||||
proc failure*[T](ret: TResult[T], err: ref CatchableError) =
|
||||
{.cast(uncheckedAssign).}:
|
||||
ret[].state = ThreadResultKind.Error
|
||||
ret[].error = err.toBuffer()
|
||||
|
||||
proc hasTask*(
|
||||
ret: TResult[bool],
|
||||
tds: ThreadDatastorePtr,
|
||||
kb: KeyBuffer,
|
||||
) =
|
||||
without key =? kb.toKey(), err:
|
||||
ret[].state = Error
|
||||
ret.failure(err)
|
||||
|
||||
try:
|
||||
let res = waitFor tds[].ds.has(key)
|
||||
if res.isErr:
|
||||
ret[].state = Error
|
||||
ret[].error = res.error().toBuffer()
|
||||
ret.failure(res.error())
|
||||
else:
|
||||
ret[].state = Success
|
||||
ret[].value = res.get()
|
||||
ret.success(res.get())
|
||||
discard ret[].signal.fireSync()
|
||||
except CatchableError as err:
|
||||
ret[].state = Error
|
||||
ret[].error = err.toBuffer()
|
||||
ret.failure(err)
|
||||
|
||||
proc has*(
|
||||
ret: TResult[bool],
|
||||
@ -88,17 +104,14 @@ proc getTask*(
|
||||
try:
|
||||
let res = waitFor tds[].ds.get(key)
|
||||
if res.isErr:
|
||||
ret[].state = Error
|
||||
ret[].error = res.error().toBuffer()
|
||||
ret.failure(res.error())
|
||||
else:
|
||||
let db = DataBuffer.new res.get()
|
||||
ret[].state = Success
|
||||
ret[].value = db
|
||||
ret.success(db)
|
||||
|
||||
discard ret[].signal.fireSync()
|
||||
except CatchableError as err:
|
||||
ret[].state = Error
|
||||
ret[].error = err.toBuffer()
|
||||
ret.failure(err)
|
||||
|
||||
proc get*(
|
||||
ret: TResult[DataBuffer],
|
||||
@ -123,10 +136,9 @@ proc putTask*(
|
||||
let res = (waitFor tds[].ds.put(key, data)).catch
|
||||
# print "thrbackend: putTask: fire", ret[].signal.fireSync().get()
|
||||
if res.isErr:
|
||||
ret[].state = Error
|
||||
ret[].error = res.error().toBuffer()
|
||||
ret.failure(res.error())
|
||||
else:
|
||||
ret[].state = Success
|
||||
ret.success()
|
||||
|
||||
discard ret[].signal.fireSync()
|
||||
|
||||
@ -154,10 +166,9 @@ proc deleteTask*(
|
||||
let res = (waitFor tds[].ds.delete(key)).catch
|
||||
# print "thrbackend: putTask: fire", ret[].signal.fireSync().get()
|
||||
if res.isErr:
|
||||
ret[].state = Error
|
||||
ret[].error = res.error().toBuffer()
|
||||
ret.failure(res.error())
|
||||
else:
|
||||
ret[].state = Success
|
||||
ret.success()
|
||||
|
||||
discard ret[].signal.fireSync()
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user