error_or 0.4.0 error_or: ^0.4.0 copied to clipboard
Return a result ErrorOr with either a value T or an error Object.
ErrorOr #
Return a result ErrorOr
with either a value T
or an error Object
.
Features #
Alternative error handling by wrapping a function that may throw exceptions, in
a function that handle these and returns an ErrorOr
.
A more explicit way of defining a function which may return an error and avoid having to try/catch these functions.
ErrorOr
can be used for both async and synchronous functions.
API #
Create an ErrorOr
instance by calling one of its factory constructors value
or error
.
Check hasError
or hasValue
, before calling error
or value
. If either is
called without the proper check, an ErrorOrTypeError
is thrown.
The convenient function ErrorOr.wrap
, does the try/catch logic for you given
a throwing function. It returns a FutureOr
so can be used for both async and
synchronous functions.
Examples #
Async example
Future<ErrorOr<T>> asyncFuncWhichThrowsWrapper() async {
try {
return ErrorOr.value(await asyncFuncWhichThrows());
} catch (e) {
return ErrorOr.error(e);
}
}
ErrorOr<String> valueOrError = await asyncFuncWhichThrowsWrapper();
if (valueOrError.hasError) {
return valueOrError;
}
String value = valueOrError.value;
Or let ErrorOr.wrap
handle the try/catch logic
ErrorOr<String> valueOrError = await ErrorOr.wrap(asyncFuncWhichThrows)
if (valueOrError.hasError) {
return valueOrError;
}
String value = valueOrError.value;
Additional information #
See my article Error handling in Dart and ErrorOr.
The "ErrorOr" is inspired by the SerenityOS ErrorOr type.
The Success/Failure pattern was inspired by result_type.
I'd like to keep this package minimal, but please get in touch on github if you have suggestions to improvements.