// Copyright (C) WYATT GROUP // Please see the AUTHORS file for details. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . import 'dart:async'; import 'package:generic_usecase/generic_usecase.dart' as uc; import 'package:sealed_result/sealed_result.dart'; import 'package:wyatt_architecture/src/core/exceptions/exceptions.dart'; typedef FutureOrResult = FutureOr>; typedef StreamResult = Stream>; /// {@template result_usecase} /// A usecase that requires params of type [Input] and returns a result of type /// [Output] or an error of type [AppException]. /// {@endtemplate} abstract class Usecase extends uc.Usecase> { /// {@macro result_usecase} const Usecase() : super(); @override FutureOrResult onException(Object e) => Result.err(AppException.from(e)); } /// {@template no_params_result_usecase} /// A usecase that does not require any params, but returns a result of type /// [Output] or an error of type [AppException]. /// {@endtemplate} abstract class NoParamsUsecase extends uc.NoParamsUsecase> { /// {@macro no_params_result_usecase} const NoParamsUsecase() : super(); @override FutureOrResult onException(Object e) => Result.err(AppException.from(e)); } /// {@template result_stream_usecase} /// A stream usecase that requires params of type [Input] and returns a /// stream of [Output] or [AppException]. /// {@endtemplate} abstract class StreamUsecase extends uc.StreamUsecase> { /// {@macro result_stream_usecase} const StreamUsecase() : super(); @override FutureOrResult onException(Object e) => Result.err(AppException.from(e)); } /// {@template no_params_result_stream_usecase} /// A stream usecase that does not require any params, but returns a /// stream of [Output] or [AppException]. /// {@endtemplate} abstract class NoParamsStreamUsecase extends uc.NoParamsStreamUsecase> { /// {@macro no_params_result_stream_usecase} const NoParamsStreamUsecase() : super(); @override FutureOrResult onException(Object e) => Result.err(AppException.from(e)); }