/// A use case represents a single unit of work in the application. abstract interface class UseCase { Output call(Input input); } /// A use case that returns a Future of [Output]. abstract interface class FutureUseCase implements UseCase> { @override Future call(Input input); } /// A use case that returns a Stream of [Output]. abstract interface class StreamUseCase implements UseCase> { @override Stream call(Input input); }