field_ios

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

TeraGeneratedDraftInventory.swift (3535B)


      1 import Foundation
      2 import TeraKitBindings
      3 
      4 enum TeraGeneratedDraftInventory {
      5   static func page(runtime: TeraRuntime, limit: UInt16, cursor: String?) async throws -> TeraLegacyDraftPage {
      6     let record = try await runtime.legacyDraftPage(schemaVersion: 1, limit: limit, cursor: cursor)
      7     try version(record.schemaVersion)
      8     return try TeraLegacyDraftPage(authorPublicKey: record.authorPublicKey,
      9                                    entries: record.entries.map(entry), nextCursor: record.nextCursor)
     10   }
     11 
     12   private static func entry(_ value: FfiLegacyDraftListEntry) throws -> TeraLegacyDraftListEntry {
     13     switch value {
     14     case let .draft(summary):
     15       try version(summary.schemaVersion)
     16       if let settlement = summary.settlement {
     17         try version(settlement.schemaVersion)
     18       }
     19       return .draft(TeraLegacyDraftSummary(id: summary.draftId, revision: summary.revision,
     20                                            kind: summary.kind.appValue, commandType: summary.commandType.appValue,
     21                                            state: summary.state.appValue, hasForm: summary.hasForm,
     22                                            isRevision: summary.isRevision,
     23                                            createdAtUnixMilliseconds: summary.createdAtUnixMs,
     24                                            updatedAtUnixMilliseconds: summary.updatedAtUnixMs,
     25                                            mediaCount: summary.mediaCount, verifiedMediaCount: summary.verifiedMediaCount,
     26                                            possibleOrphanCount: summary.possibleOrphanCount, settlement: summary.settlement?.appValue,
     27                                            revisionParentID: summary.revisionParentDraftId,
     28                                            coordinateWritable: summary.coordinateWritable,
     29                                            coordinateCaptured: summary.coordinateCaptured))
     30     case let .repair(draftKey, revision, reason):
     31       let reason: TeraLegacyDraftRepairReason = switch reason {
     32       case .unsupportedSchema: .unsupportedSchema
     33       case .corruptRecord: .corruptRecord
     34       case .needsAttention: .needsAttention
     35       }
     36       return .repair(draftKey: draftKey, revision: revision, reason: reason)
     37     }
     38   }
     39 
     40   private static func version(_ value: UInt16) throws {
     41     guard value == 1 else {
     42       throw TeraRuntimeFailure.local(operation: "runtime.draftInventory", code: "unsupported_schema_version",
     43                                      safeMessage: "This saved draft format requires a compatible app.")
     44     }
     45   }
     46 }
     47 
     48 extension FfiAddCommandType {
     49   var appValue: TeraAddCommandType {
     50     switch self {
     51     case .createUpdate: .createUpdate
     52     case .createPhotoUpdate: .createPhotoUpdate
     53     case .createAsk: .createAsk
     54     case .createEvent: .createEvent
     55     case .createFoodAvailability: .createFoodAvailability
     56     }
     57   }
     58 }
     59 
     60 extension FfiDraftKind {
     61   var appValue: TeraDraftKind {
     62     switch self {
     63     case .add: .add
     64     case .retraction: .retraction
     65     }
     66   }
     67 }
     68 
     69 extension FfiOutboxState {
     70   var appValue: TeraOutboxState {
     71     switch self {
     72     case .draft: .draft
     73     case .mediaPreparing: .mediaPreparing
     74     case .mediaUploading: .mediaUploading
     75     case .readyToSign: .readyToSign
     76     case .signing: .signing
     77     case .signed: .signed
     78     case .queued: .queued
     79     case .delivering: .delivering
     80     case .partiallyDelivered: .partiallyDelivered
     81     case .retryable: .retryable
     82     case .terminal: .terminal
     83     case .cancelled: .cancelled
     84     case .complete: .complete
     85     }
     86   }
     87 }