Useful for ease of error management and recording unexpected errors.
- Convert from source to base error
- Return value for matched source errors
- Logging unexpected errors with extra fields
Create client (extends BaseGuardian class), implements methods.
class BaseError extends Error {}
class UnexpectedError extends BaseError {}
class DivideError extends BaseError {}
class Guardian<T> extends BaseGuardian<T, BaseError> {
@override
BaseError unexpectedError(Object error) {
return UnexpectedError();
}
@override
void onLog(GuardianLog log) {
print(log.message);
}
}
Future<void> main() async {
try {
final res = divide(5, 0);
print(res);
} catch (e) {
print(e.runtimeType);
print(e.stackTrace);
}
}
int divide(int a, int b) {
final guardian = Guardian<int>()
..extra({'a': a, 'b': b})
..map<IntegerDivisionByZeroException>((err) => DivideError());
return guardian.guardSync(() => a ~/ b);
}