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 }