mirror of
https://github.com/logos-storage/questionable.git
synced 2026-01-04 06:43:10 +00:00
Use failure and success instead of ok and err
- Adds `isFailure` and `isSuccess`. - No longer exports `ok`, `err`, `isErr` and `isOk`.
This commit is contained in:
parent
a2023ae18e
commit
86bfcc1a47
@ -5,7 +5,7 @@ import ./operators
|
|||||||
|
|
||||||
include ./errorban
|
include ./errorban
|
||||||
|
|
||||||
export resultsbase
|
export resultsbase except ok, err, isOk, isErr
|
||||||
|
|
||||||
type ResultFailure* = object of CatchableError
|
type ResultFailure* = object of CatchableError
|
||||||
|
|
||||||
@ -21,16 +21,22 @@ proc failure*(T: type, error: ref CatchableError): ?!T =
|
|||||||
proc failure*(T: type, message: string): ?!T =
|
proc failure*(T: type, message: string): ?!T =
|
||||||
T.failure newException(ResultFailure, message)
|
T.failure newException(ResultFailure, message)
|
||||||
|
|
||||||
|
proc isSuccess*[T](value: ?!T): bool =
|
||||||
|
value.isOk
|
||||||
|
|
||||||
|
proc isFailure*[T](value: ?!T): bool =
|
||||||
|
value.isErr
|
||||||
|
|
||||||
template `->?`*[T,U](value: ?!T, expression: U): ?!U =
|
template `->?`*[T,U](value: ?!T, expression: U): ?!U =
|
||||||
if value.isErr:
|
if value.isFailure:
|
||||||
U.failure(value.error)
|
U.failure(value.error)
|
||||||
else:
|
else:
|
||||||
expression.success
|
expression.success
|
||||||
|
|
||||||
template `->?`*[T,U,V](values: (?!T, ?!U), expression: V): ?!V =
|
template `->?`*[T,U,V](values: (?!T, ?!U), expression: V): ?!V =
|
||||||
if values[0].isErr:
|
if values[0].isFailure:
|
||||||
V.failure(values[0].error)
|
V.failure(values[0].error)
|
||||||
elif values[1].isErr:
|
elif values[1].isFailure:
|
||||||
V.failure(values[1].error)
|
V.failure(values[1].error)
|
||||||
else:
|
else:
|
||||||
expression.success
|
expression.success
|
||||||
@ -41,19 +47,19 @@ template `|?`*[T](value: ?!T, fallback: T): T =
|
|||||||
template `=?`*[T](name: untyped{nkIdent}, expression: ?!T): bool =
|
template `=?`*[T](name: untyped{nkIdent}, expression: ?!T): bool =
|
||||||
let value = expression
|
let value = expression
|
||||||
template name: T {.used.} = value.unsafeGet()
|
template name: T {.used.} = value.unsafeGet()
|
||||||
value.isOk
|
value.isSuccess
|
||||||
|
|
||||||
macro `=?`*[T](variable: untyped{nkVarTy}, expression: ?!T): bool =
|
macro `=?`*[T](variable: untyped{nkVarTy}, expression: ?!T): bool =
|
||||||
let name = variable[0]
|
let name = variable[0]
|
||||||
quote do:
|
quote do:
|
||||||
let value = `expression`
|
let value = `expression`
|
||||||
var `name` : typeof(value.unsafeGet())
|
var `name` : typeof(value.unsafeGet())
|
||||||
if value.isOk:
|
if value.isSuccess:
|
||||||
`name` = value.unsafeGet()
|
`name` = value.unsafeGet()
|
||||||
value.isOk
|
value.isSuccess
|
||||||
|
|
||||||
proc option*[T,E](value: Result[T,E]): ?T =
|
proc option*[T,E](value: Result[T,E]): ?T =
|
||||||
if value.isOk:
|
if value.isSuccess:
|
||||||
value.unsafeGet.some
|
value.unsafeGet.some
|
||||||
else:
|
else:
|
||||||
T.none
|
T.none
|
||||||
|
|||||||
@ -180,7 +180,7 @@ suite "result":
|
|||||||
let x = parseInt("42").catch
|
let x = parseInt("42").catch
|
||||||
check (x == 42.success)
|
check (x == 42.success)
|
||||||
let y = parseInt("XX").catch
|
let y = parseInt("XX").catch
|
||||||
check y.isErr
|
check y.isFailure
|
||||||
|
|
||||||
# Conversion to Option
|
# Conversion to Option
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user