TeraRevisionModels.swift (1646B)
1 import Foundation 2 3 struct TeraRevisionTarget: Sendable, Equatable, Hashable { 4 let cardID: String 5 let sourceEventID: String 6 let sourceAddress: String? 7 let authorPublicKey: String 8 } 9 10 enum TeraRevisionPolicy: Sendable, Equatable, Hashable { 11 case replaceThenRetract 12 case addressableReplacement 13 } 14 15 enum TeraRevisionPhase: Sendable, Equatable, Hashable { 16 case replacementPending 17 case replacementFailed 18 case retractionPending 19 case complete 20 case partialEffect 21 case cancelled 22 } 23 24 struct TeraRevisionStatus: Sendable, Equatable { 25 let operationID: String 26 let replacement: TeraDraftStatus 27 let retraction: TeraDraftStatus? 28 let policy: TeraRevisionPolicy 29 let phase: TeraRevisionPhase 30 31 var original: TeraRevisionTarget? 32 var replacementProgress: TeraRevisionBranchStatus = .unavailable 33 var retractionProgress: TeraRevisionBranchStatus? 34 var canResume = false 35 var canCancel = false 36 37 var honestSummary: String { 38 switch phase { 39 case .replacementPending: "Replacement saved for delivery" 40 case .replacementFailed: "Replacement needs attention; no relay acceptance is confirmed" 41 case .retractionPending: "Replacement requirements met; retraction is pending" 42 case .complete: "Saved relay requirements met" 43 case .partialEffect: "Revision has partial or uncertain relay outcomes" 44 case .cancelled: "Local revision work stopped" 45 } 46 } 47 } 48 49 struct TeraRevisionBranchStatus: Sendable, Equatable { 50 let stopped: Bool 51 let canResume: Bool 52 let canCancel: Bool 53 let targets: TeraPublicationTargets? 54 55 static let unavailable = Self(stopped: false, canResume: false, canCancel: false, targets: nil) 56 }