tryMap method

  1. @override
Failure? tryMap(
  1. Object error, [
  2. StackTrace? stackTrace
])
override

Пытается преобразовать error в Failure, если это AppException.

Для каждого типа AppException создаёт соответствующий Failure с сохранением всех полей (тип, сообщение, ключ, поле и т.д.).

Возвращает: Failure или null, если error не является AppException.

Implementation

@override
Failure? tryMap(Object error, [StackTrace? stackTrace]) {
  // 1. Проверяем кастомные маппинги
  final customMapper = extraMappings[error.runtimeType];
  if (customMapper != null) return customMapper(error);

  // 2. Стандартные 13 типов
  return switch (error) {
    AuthAppException e => Failure.auth(type: e.type, message: e.message),
    ValidationAppException e => Failure.validation(
      type: e.type,
      field: e.field,
      message: e.message,
      fieldErrors: e.fieldErrors,
    ),
    StorageAppException e => Failure.storage(
      type: e.type,
      key: e.key,
      message: e.message,
    ),
    DatabaseAppException e => Failure.database(
      type: e.type,
      message: e.message,
    ),
    CacheAppException e => Failure.cache(type: e.type, key: e.key),
    ParseAppException e => Failure.parse(
      type: e.type,
      field: e.field,
      message: e.message,
    ),
    PermissionAppException e => Failure.permission(
      type: e.type,
      permission: e.permission,
    ),
    PlatformAppException e => Failure.platform(
      type: e.type,
      details: e.details,
    ),
    FileAppException e => Failure.file(
      type: e.type,
      path: e.path,
      message: e.message,
    ),
    LocationAppException e => Failure.location(
      type: e.type,
      message: e.message,
    ),
    NotificationAppException e => Failure.notification(
      type: e.type,
      message: e.message,
    ),
    PaymentAppException e => Failure.payment(
      type: e.type,
      message: e.message,
      transactionId: e.transactionId,
    ),
    SyncAppException e => Failure.sync(type: e.type, message: e.message),
    _ => null,
  };
}