class ServerException implements Exception {
  final String message;
  const ServerException(this.message);

  @override
  String toString() => message;
}

class NetworkException implements Exception {
  final String message;
  const NetworkException(this.message);

  @override
  String toString() => message;
}

class AuthException implements Exception {
  final String message;
  const AuthException(this.message);

  @override
  String toString() => message;
}

class RateLimitException implements Exception {
  final int waitSeconds;
  const RateLimitException({required this.waitSeconds});

  @override
  String toString() => 'Rate limited — wait $waitSeconds seconds';
}

class NotFoundException implements Exception {
  final String message;
  const NotFoundException(this.message);

  @override
  String toString() => message;
}

class ConflictException implements Exception {
  final String message;
  const ConflictException(this.message);

  @override
  String toString() => message;
}