field_ios

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

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 }