field_ios

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

TeraGeneratedRestoreRecovery.swift (1897B)


      1 import TeraKitBindings
      2 
      3 extension TeraGeneratedRuntimeBackend {
      4   func restoreStatus() async throws -> TeraRestoreStatus? {
      5     do {
      6       guard let value = try await runtime.applicationRestoreStatus() else { return nil }
      7       let phase: TeraRestorePhase = switch value.phase {
      8       case .held: .held
      9       case .reviewed: .reviewed
     10       case .resumed: .resumed
     11       }
     12       return TeraRestoreStatus(attemptID: value.attemptId, phase: phase, targets: value.targets.map(Self.restoreTarget))
     13     } catch { throw TeraGeneratedRuntimeFailure.from(error) }
     14   }
     15 
     16   func reconcileRestoredTarget(_ target: TeraRestoreTarget) async throws {
     17     do {
     18       let value = try await runtime.reconcileRestoredTarget(draftId: target.draftID, targetFingerprint: target.targetFingerprint)
     19       guard value.draftId == target.draftID, value.eventId == target.eventID,
     20         value.targetFingerprint == target.targetFingerprint else { throw TeraComposerAcknowledgment.unconfirmed }
     21     } catch { throw TeraGeneratedRuntimeFailure.from(error) }
     22   }
     23 
     24   func reviewRestoredWork() async throws -> String {
     25     do { return try await runtime.reviewRestoredWork() } catch { throw TeraGeneratedRuntimeFailure.from(error) }
     26   }
     27 
     28   func resumeRestoredWork(reviewedInventory: String) async throws {
     29     do { try await runtime.resumeRestoredWork(reviewedInventory: reviewedInventory) } catch { throw TeraGeneratedRuntimeFailure.from(error) }
     30   }
     31 
     32   private static func restoreTarget(_ value: FfiRestoreTarget) -> TeraRestoreTarget {
     33     let observation: TeraRestoreObservation? = value.observation.map {
     34       switch $0 {
     35       case .observed: .observed
     36       case .notObserved: .notObserved
     37       case .incomplete: .incomplete
     38       }
     39     }
     40     return TeraRestoreTarget(draftID: value.draftId, eventID: value.eventId,
     41                              targetFingerprint: value.targetFingerprint, observation: observation)
     42   }
     43 }