@startuml
set namespaceSeparator ::

abstract class "wyatt_architecture::src::core::exceptions::exceptions.dart::AppException" {
  +String? message
  +String toString()
}

"dart::core::Exception" <|-- "wyatt_architecture::src::core::exceptions::exceptions.dart::AppException"

class "wyatt_architecture::src::core::exceptions::exceptions.dart::ClientException" {
}

"wyatt_architecture::src::core::exceptions::exceptions.dart::AppException" <|-- "wyatt_architecture::src::core::exceptions::exceptions.dart::ClientException"
class "wyatt_architecture::src::core::exceptions::exceptions.dart::ServerException" {
}

"wyatt_architecture::src::core::exceptions::exceptions.dart::AppException" <|-- "wyatt_architecture::src::core::exceptions::exceptions.dart::ServerException"

abstract class "wyatt_architecture::src::domain::repositories::base_repository.dart::BaseRepository" {
}

abstract class "wyatt_architecture::src::domain::data_sources::local::base_local_data_source.dart::BaseLocalDataSource" {
}

"wyatt_architecture::src::domain::data_sources::base_data_source.dart::BaseDataSource" <|-- "wyatt_architecture::src::domain::data_sources::local::base_local_data_source.dart::BaseLocalDataSource"

abstract class "wyatt_architecture::src::domain::data_sources::base_data_source.dart::BaseDataSource" {
}

abstract class "wyatt_architecture::src::domain::data_sources::remote::base_remote_data_source.dart::BaseRemoteDataSource" {
}

"wyatt_architecture::src::domain::data_sources::base_data_source.dart::BaseDataSource" <|-- "wyatt_architecture::src::domain::data_sources::remote::base_remote_data_source.dart::BaseRemoteDataSource"

class "wyatt_architecture::src::domain::usecases::no_param.dart::NoParam" {
}

"wyatt_architecture::src::domain::entities::entity.dart::Entity" <|-- "wyatt_architecture::src::domain::usecases::no_param.dart::NoParam"

abstract class "wyatt_architecture::src::domain::usecases::observers.dart::Observer" {
  +FutureOr<void> onStart()
  +FutureOr<void> onError()
}

abstract class "wyatt_architecture::src::domain::usecases::observers.dart::AsyncObserver" {
  +FutureOr<void> onComplete()
}

abstract class "wyatt_architecture::src::domain::usecases::observers.dart::StreamObserver" {
  +void onDone()
  +void onData()
}

abstract class "wyatt_architecture::src::domain::usecases::usecase.dart::BaseUseCase" {
  +ReturnType execute()
  +ReturnType call()
}

abstract class "wyatt_architecture::src::domain::usecases::usecase.dart::UseCase" {
  -FutureOr<void> _onSuccess()
  +FutureOr<Result<ReturnType, AppException>> execute()
}

"wyatt_architecture::src::domain::usecases::usecase.dart::BaseUseCase" <|-- "wyatt_architecture::src::domain::usecases::usecase.dart::UseCase"
"wyatt_architecture::src::domain::usecases::observers.dart::Observer" <|-- "wyatt_architecture::src::domain::usecases::usecase.dart::UseCase"

abstract class "wyatt_architecture::src::domain::usecases::usecase.dart::AsyncUseCase" {
  -FutureOr<void> _onSuccess()
}

"wyatt_architecture::src::domain::usecases::usecase.dart::UseCase" <|-- "wyatt_architecture::src::domain::usecases::usecase.dart::AsyncUseCase"
"wyatt_architecture::src::domain::usecases::observers.dart::AsyncObserver" <|-- "wyatt_architecture::src::domain::usecases::usecase.dart::AsyncUseCase"

abstract class "wyatt_architecture::src::domain::usecases::usecase.dart::StreamUseCase" {
  -FutureOr<void> _onSuccess()
}

"wyatt_architecture::src::domain::usecases::usecase.dart::UseCase" <|-- "wyatt_architecture::src::domain::usecases::usecase.dart::StreamUseCase"
"wyatt_architecture::src::domain::usecases::observers.dart::StreamObserver" <|-- "wyatt_architecture::src::domain::usecases::usecase.dart::StreamUseCase"

abstract class "wyatt_architecture::src::domain::entities::entity.dart::Entity" {
}


@enduml