This commit is contained in:
Mark Spanbroek 2021-06-04 16:38:44 +02:00
parent 986716511f
commit a2ded4f01a
2 changed files with 10 additions and 24 deletions

View File

@ -20,23 +20,14 @@ template `?`*(T: typed): type Option[T] =
template `!`*[T](option: ?T): T =
option.get
template `->?`*[T,U](option: ?T, expression: U): ?U =
if option.isSome:
expression.some
else:
U.none
template `->?`*[T,U](option: ?T, expression: ?U): ?U =
if option.isSome:
expression
else:
U.none
template `->?`*[T,U,V](options: (?T, ?U), expression: V): ?V =
if options[0].isSome and options[1].isSome:
expression.some
else:
V.none
template `->?`*[T,U](option: ?T, expression: U): ?U =
option ->? expression.some
template `->?`*[T,U,V](options: (?T, ?U), expression: ?V): ?V =
if options[0].isSome and options[1].isSome:
@ -44,6 +35,9 @@ template `->?`*[T,U,V](options: (?T, ?U), expression: ?V): ?V =
else:
V.none
template `->?`*[T,U,V](options: (?T, ?U), expression: V): ?V =
options ->? expression.some
template `|?`*[T](option: ?T, fallback: T): T =
if option.isSome:
option.unsafeGet()

View File

@ -47,25 +47,14 @@ proc isSuccess*[T](value: ?!T): bool =
proc isFailure*[T](value: ?!T): bool =
value.isErr
template `->?`*[T,U](value: ?!T, expression: U): ?!U =
if value.isFailure:
U.failure(value.error)
else:
expression.success
template `->?`*[T,U](value: ?!T, expression: ?!U): ?!U =
if value.isFailure:
U.failure(value.error)
else:
expression
template `->?`*[T,U,V](values: (?!T, ?!U), expression: V): ?!V =
if values[0].isFailure:
V.failure(values[0].error)
elif values[1].isFailure:
V.failure(values[1].error)
else:
expression.success
template `->?`*[T,U](value: ?!T, expression: U): ?!U =
value ->? expression.success
template `->?`*[T,U,V](values: (?!T, ?!U), expression: ?!V): ?!V =
if values[0].isFailure:
@ -75,6 +64,9 @@ template `->?`*[T,U,V](values: (?!T, ?!U), expression: ?!V): ?!V =
else:
expression
template `->?`*[T,U,V](values: (?!T, ?!U), expression: V): ?!V =
values ->? expression.success
template `|?`*[T,E](value: Result[T,E], fallback: T): T =
value.valueOr(fallback)