import 'package:fpdart/fpdart.dart'; import 'package:umbrix/utils/utils.dart'; import 'package:rxdart/rxdart.dart'; mixin ExceptionHandler implements LoggerMixin { TaskEither exceptionHandler( Future> Function() run, F Function(Object error, StackTrace stackTrace) onError, ) { return TaskEither( () async { try { return await run(); } catch (error, stackTrace) { return Left(onError(error, stackTrace)); } }, ); } } extension StreamExceptionHandler on Stream { Stream> handleExceptions( F Function(Object error, StackTrace stackTrace) onError, ) { return map(right).onErrorReturnWith( (error, stackTrace) { return Left(onError(error, stackTrace)); }, ); } } extension TaskEitherExceptionHandler on TaskEither { TaskEither handleExceptions( F Function(Object error, StackTrace stackTrace) onError, ) { return TaskEither( () async { try { return await run(); } catch (error, stackTrace) { return Left(onError(error, stackTrace)); } }, ); } }