import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:umbrix/core/localization/translations.dart'; import 'package:umbrix/core/model/failures.dart'; part 'connection_failure.freezed.dart'; @freezed sealed class ConnectionFailure with _$ConnectionFailure, Failure { const ConnectionFailure._(); @With() const factory ConnectionFailure.unexpected([ Object? error, StackTrace? stackTrace, ]) = UnexpectedConnectionFailure; @With() const factory ConnectionFailure.missingVpnPermission([String? message]) = MissingVpnPermission; @With() const factory ConnectionFailure.missingNotificationPermission([ String? message, ]) = MissingNotificationPermission; @With() const factory ConnectionFailure.missingPrivilege() = MissingPrivilege; @With() const factory ConnectionFailure.missingGeoAssets() = MissingGeoAssets; @With() const factory ConnectionFailure.invalidConfigOption([ String? message, ]) = InvalidConfigOption; @With() const factory ConnectionFailure.invalidConfig([ String? message, ]) = InvalidConfig; @override ({String type, String? message}) present(TranslationsEn t) { return switch (this) { UnexpectedConnectionFailure() => ( type: t.failure.connectivity.unexpected, message: null, ), MissingVpnPermission(:final message) => ( type: t.failure.connectivity.missingVpnPermission, message: message ), MissingNotificationPermission(:final message) => ( type: t.failure.connectivity.missingNotificationPermission, message: message ), MissingPrivilege() => ( type: t.failure.singbox.missingPrivilege, message: t.failure.singbox.missingPrivilegeMsg, ), MissingGeoAssets() => ( type: t.failure.singbox.missingGeoAssets, message: t.failure.singbox.missingGeoAssetsMsg, ), InvalidConfigOption(:final message) => ( type: t.failure.singbox.invalidConfigOptions, message: message, ), InvalidConfig(:final message) => ( type: t.failure.singbox.invalidConfig, message: message, ), }; } }