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 }