TeraGeneratedRecoveryStatus.swift (2105B)
1 import TeraKitBindings 2 3 extension TeraGeneratedRuntimeBackend { 4 func nativeRecoveryStatus(key: String) async throws -> TeraNativeRecoveryStatus? { 5 do { 6 return try await runtime.nativeRecoveryStatus(schemaVersion: 1, transferKey: key).map { try $0.appValue(key: key) } 7 } catch { throw TeraGeneratedRuntimeFailure.from(error) } 8 } 9 10 func reportNativeRecoveryStatus(key: String, reason: TeraNativeRecoveryReason) async throws -> TeraNativeRecoveryStatus? { 11 do { 12 let value = try await runtime.reportNativeRecoveryStatus(schemaVersion: 1, transferKey: key, reason: reason.generatedValue) 13 let result = try value.map { try $0.appValue(key: key) } 14 guard result?.reason == reason || (result == nil && reason == .resolved) else { throw TeraComposerAcknowledgment.unconfirmed } 15 return result 16 } catch { throw TeraGeneratedRuntimeFailure.from(error) } 17 } 18 } 19 20 private extension FfiNativeRecoveryStatus { 21 func appValue(key: String) throws -> TeraNativeRecoveryStatus { 22 guard schemaVersion == 1, self.key == key, revision > 0, revision <= UInt64(Int64.max), 23 firstObservedUnixMs > 0, updatedAtUnixMs >= firstObservedUnixMs, updatedAtUnixMs <= UInt64(Int64.max) 24 else { throw TeraComposerAcknowledgment.unconfirmed } 25 return .init(key: key, reason: reason.appValue, revision: revision, 26 firstObservedUnixMS: firstObservedUnixMs, updatedAtUnixMS: updatedAtUnixMs) 27 } 28 } 29 30 private extension FfiNativeRecoveryReason { 31 var appValue: TeraNativeRecoveryReason { 32 switch self { 33 case .missingParent: .missingParent 34 case .invalidParent: .invalidParent 35 case .associationMismatch: .associationMismatch 36 case .outcomeUnconfirmed: .outcomeUnconfirmed 37 case .resolved: .resolved 38 } 39 } 40 } 41 42 private extension TeraNativeRecoveryReason { 43 var generatedValue: FfiNativeRecoveryReason { 44 switch self { 45 case .missingParent: .missingParent 46 case .invalidParent: .invalidParent 47 case .associationMismatch: .associationMismatch 48 case .outcomeUnconfirmed: .outcomeUnconfirmed 49 case .resolved: .resolved 50 } 51 } 52 }