field_ios

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

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 }