import 'failures.dart'; sealed class Result { const Result(); bool get isSuccess => this is Success; bool get isFailure => this is Failure; T? get data => this is Success ? (this as Success).data : null; Failure? get failure => this is Error ? (this as Error).failure : null; R when({ required R Function(T data) success, required R Function(Failure failure) error, }) { if (this is Success) { return success((this as Success).data); } else { return error((this as Error).failure); } } } class Success extends Result { @override final T data; const Success(this.data); } class Error extends Result { @override final Failure failure; const Error(this.failure); }