abstract class Failure { final String message; final String? code; const Failure({required this.message, this.code}); @override String toString() => 'Failure(message: $message, code: $code)'; } class ServerFailure extends Failure { const ServerFailure({required super.message, super.code}); } class NetworkFailure extends Failure { const NetworkFailure({super.message = 'Network connection error', super.code}); } class ValidationFailure extends Failure { const ValidationFailure({required super.message, super.code}); } class NotFoundFailure extends Failure { const NotFoundFailure({super.message = 'Resource not found', super.code}); } class UnexpectedFailure extends Failure { const UnexpectedFailure({super.message = 'An unexpected error occurred', super.code}); }