field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

TeraErrorRecovery.swift (1622B)


      1 import Foundation
      2 import TeraKitBindings
      3 
      4 extension TeraRuntimeFailure {
      5   var recovery: FfiRecoveryDecision {
      6     classifyErrorRecovery(schemaVersion: schemaVersion, code: code)
      7   }
      8 
      9   static func from(_ error: Error) -> TeraRuntimeFailure? {
     10     if let failure = error as? TeraRuntimeFailure {
     11       return failure
     12     }
     13     guard let error = error as? TeraRuntimeClientError else { return nil }
     14     switch error {
     15     case let .startup(failure), let .subscription(failure), let .status(failure),
     16          let .today(failure), let .add(failure), let .support(failure), let .shutdown(failure):
     17       return failure
     18     case .invalidBufferCapacity, .notRunning, .superseded:
     19       return nil
     20     }
     21   }
     22 
     23   func messageKey(fallback: TeraUserMessageKey) -> TeraUserMessageKey {
     24     Self.recoveryMessages[recovery.disposition] ?? fallback
     25   }
     26 
     27   private static let recoveryMessages: [FfiRecoveryDisposition: TeraUserMessageKey] = [
     28     .invalidInput: .invalidRequest,
     29     .staleRevision: .stateChanged,
     30     .idempotencyConflict: .operationConflict,
     31     .staleCursor: .todayChanged,
     32     .protectedDataUnavailable: .protectedDataUnavailable,
     33     .identityUnavailable: .identityOperationFailed,
     34     .storageFailure: .secureStateUnavailable,
     35     .quotaExhausted: .storageFull,
     36     .cancelledBeforeEffect: .operationCancelled,
     37     .outcomeUnknown: .operationOutcomeUnknown,
     38     .unsupportedVersion: .versionUnsupported,
     39     .networkUnavailable: .networkUnavailable,
     40     .partialResult: .partialResult,
     41     .networkPolicy: .networkPolicy,
     42     .mediaCorrupt: .fileOperationFailed,
     43     .runtimeUnavailable: .runtimeUnavailable,
     44   ]
     45 }