2022-12-14 21:53:46 +00:00
|
|
|
import 'package:result_monad/result_monad.dart';
|
|
|
|
|
2023-01-18 05:15:52 +00:00
|
|
|
Result<T, ExecError> buildErrorResult<T>({
|
|
|
|
required ErrorType type,
|
|
|
|
String message = '',
|
|
|
|
}) =>
|
|
|
|
Result.error(
|
|
|
|
ExecError(
|
|
|
|
type: type,
|
|
|
|
message: message,
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
2022-11-09 02:19:44 +00:00
|
|
|
class ExecError {
|
|
|
|
final ErrorType type;
|
|
|
|
final String message;
|
|
|
|
|
|
|
|
ExecError({required this.type, this.message = ''});
|
|
|
|
|
2023-01-18 05:15:52 +00:00
|
|
|
ExecError copy({
|
|
|
|
ErrorType? type,
|
|
|
|
String? message,
|
|
|
|
}) =>
|
|
|
|
ExecError(
|
|
|
|
type: type ?? this.type,
|
|
|
|
message: message ?? this.message,
|
|
|
|
);
|
|
|
|
|
2022-11-09 02:19:44 +00:00
|
|
|
@override
|
|
|
|
String toString() {
|
|
|
|
return 'ExecError{type: $type, message: $message}';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
enum ErrorType {
|
|
|
|
authentication,
|
|
|
|
localError,
|
|
|
|
missingEndpoint,
|
2022-11-17 16:04:14 +00:00
|
|
|
notFound,
|
2022-11-09 02:19:44 +00:00
|
|
|
parsingError,
|
2023-01-25 18:06:46 +00:00
|
|
|
serverError,
|
2023-02-10 10:29:02 +00:00
|
|
|
rangeError,
|
2022-11-09 02:19:44 +00:00
|
|
|
}
|
2022-12-14 21:53:46 +00:00
|
|
|
|
|
|
|
extension ExecErrorExtension<T, E> on Result<T, E> {
|
|
|
|
Result<T, ExecError> execErrorCast() => mapError((error) => error is ExecError
|
|
|
|
? error
|
|
|
|
: ExecError(type: ErrorType.localError, message: error.toString()));
|
|
|
|
|
|
|
|
FutureResult<T, ExecError> execErrorCastAsync() async => execErrorCast();
|
|
|
|
}
|