field_ios

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

TeraSubmissionModels.swift (1602B)


      1 import Foundation
      2 
      3 /// Identity of one intentional action; retain the request unchanged for every retry.
      4 struct TeraSubmissionRequest: Sendable, Equatable {
      5   let commandID: String
      6   let scope: TeraComposerScope
      7   let composerID: String
      8   let expectedRevision: UInt64
      9 }
     10 
     11 /// A saved source reservation, without publication or delivery authority.
     12 struct TeraSubmissionReservation: Sendable, Equatable {
     13   let commandID: String
     14   let reservationID: String
     15   let captured: TeraComposerDraft
     16   let reservedAtUnixMilliseconds: UInt64
     17   let replayed: Bool
     18 }
     19 
     20 extension TeraRuntimeBackend {
     21   func reserveSubmissionID() async throws -> String {
     22     throw TeraRuntimeFailure.local(operation: "runtime.submission", code: "ios.add.unsupported",
     23                                    safeMessage: "Submission reservation is unavailable.")
     24   }
     25 
     26   func reserveSubmission(request _: TeraSubmissionRequest) async throws -> TeraSubmissionReservation {
     27     throw TeraRuntimeFailure.local(operation: "runtime.submission", code: "ios.add.unsupported",
     28                                    safeMessage: "Submission reservation is unavailable.")
     29   }
     30 }
     31 
     32 extension TeraRuntimeClient {
     33   func reserveSubmissionID() async throws -> String {
     34     try await addOperation("runtime.submission.reserve_id") { backend in
     35       try await backend.reserveSubmissionID()
     36     }
     37   }
     38 
     39   func reserveSubmission(request: TeraSubmissionRequest) async throws -> TeraSubmissionReservation {
     40     try await addOperation("runtime.submission.reserve", submission: true) { backend in
     41       try await backend.reserveSubmission(request: request)
     42     }
     43   }
     44 }