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 = template `!`*[T](option: ?T): T =
option.get 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 = template `->?`*[T,U](option: ?T, expression: ?U): ?U =
if option.isSome: if option.isSome:
expression expression
else: else:
U.none U.none
template `->?`*[T,U,V](options: (?T, ?U), expression: V): ?V = template `->?`*[T,U](option: ?T, expression: U): ?U =
if options[0].isSome and options[1].isSome: option ->? expression.some
expression.some
else:
V.none
template `->?`*[T,U,V](options: (?T, ?U), expression: ?V): ?V = template `->?`*[T,U,V](options: (?T, ?U), expression: ?V): ?V =
if options[0].isSome and options[1].isSome: if options[0].isSome and options[1].isSome:
@ -44,6 +35,9 @@ template `->?`*[T,U,V](options: (?T, ?U), expression: ?V): ?V =
else: else:
V.none V.none
template `->?`*[T,U,V](options: (?T, ?U), expression: V): ?V =
options ->? expression.some
template `|?`*[T](option: ?T, fallback: T): T = template `|?`*[T](option: ?T, fallback: T): T =
if option.isSome: if option.isSome:
option.unsafeGet() option.unsafeGet()

View File

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