shitman/lib/settings/exceptions.dart
zeyus bc128cef3d
Some checks are pending
/ build-web (push) Waiting to run
just a concept.
2025-07-21 22:52:31 +02:00

104 lines
3.3 KiB
Dart

/// Exception thrown when a requested setting is not found.
///
/// This occurs when:
/// - Accessing a setting that doesn't exist in the group
/// - Using an invalid storage key format
/// - Referencing a setting before it's been registered
///
/// Example:
/// ```dart
/// try {
/// Settings.getBool('nonexistent.setting');
/// } catch (e) {
/// if (e is SettingNotFoundException) {
/// print('Setting not found: ${e.message}');
/// }
/// }
/// ```
class SettingNotFoundException implements Exception {
/// Descriptive error message explaining what setting was not found.
final String message;
/// Creates a new [SettingNotFoundException] with the given [message].
const SettingNotFoundException(this.message);
@override
String toString() => 'SettingNotFoundException: $message';
}
/// Exception thrown when attempting to modify a non-configurable setting.
///
/// Settings can be marked as non-configurable by setting `userConfigurable: false`.
/// This is useful for system settings or read-only configuration values.
///
/// Example:
/// ```dart
/// final systemSetting = BoolSetting(
/// key: 'systemFlag',
/// defaultValue: true,
/// userConfigurable: false, // This setting cannot be modified by users
/// );
/// ```
class SettingNotConfigurableException implements Exception {
/// Descriptive error message explaining which setting cannot be configured.
final String message;
/// Creates a new [SettingNotConfigurableException] with the given [message].
const SettingNotConfigurableException(this.message);
@override
String toString() => 'SettingNotConfigurableException: $message';
}
/// Exception thrown when a setting value fails validation.
///
/// This occurs when a validator function returns false for a given value.
/// Validators are useful for ensuring data integrity and business rules.
///
/// Example:
/// ```dart
/// final volumeSetting = DoubleSetting(
/// key: 'volume',
/// defaultValue: 0.5,
/// validator: (value) => value >= 0.0 && value <= 1.0,
/// );
///
/// // This will throw SettingValidationException
/// await Settings.setDouble('audio.volume', 1.5);
/// ```
class SettingValidationException implements Exception {
/// Descriptive error message explaining the validation failure.
final String message;
/// Creates a new [SettingValidationException] with the given [message].
const SettingValidationException(this.message);
@override
String toString() => 'SettingValidationException: $message';
}
/// Exception thrown when attempting to access settings before initialization.
///
/// The settings framework requires asynchronous initialization before use.
/// Always await `Settings.init()` or individual `readyFuture` properties
/// before accessing setting values.
///
/// Example:
/// ```dart
/// // Wrong - may throw SettingsNotReadyException
/// bool value = Settings.getBool('game.sound');
///
/// // Correct - wait for initialization
/// await Settings.init();
/// bool value = Settings.getBool('game.sound');
/// ```
class SettingsNotReadyException implements Exception {
/// Descriptive error message explaining the readiness issue.
final String message;
/// Creates a new [SettingsNotReadyException] with the given [message].
const SettingsNotReadyException(this.message);
@override
String toString() => 'SettingsNotReadyException: $message';
}