necoherence/request_progression

Types

pub type Accepted {
  Accepted(identity: RequestIdentity)
}

Constructors

pub type AdapterCommand {
  StartCommand(
    identity: RequestIdentity,
    footprint: RequestFootprint,
  )
  CancelCommand(
    identity: RequestIdentity,
    handle: ExecutionHandle,
  )
}

Constructors

pub type AdapterFailure {
  StartAdapterFailure(identity: RequestIdentity, detail: String)
  CompletionAdapterFailure(
    identity: RequestIdentity,
    handle: ExecutionHandle,
    detail: String,
  )
  CancellationAdapterFailure(
    identity: RequestIdentity,
    handle: ExecutionHandle,
    detail: String,
  )
}

Constructors

pub type AdapterResult(result) {
  AppliedSignal(AdapterSignal(result))
  AdapterFailed(AdapterFailure)
}

Constructors

pub type AdapterSignal(result) {
  Started(identity: RequestIdentity, handle: ExecutionHandle)
  Completed(
    identity: RequestIdentity,
    handle: ExecutionHandle,
    value: result,
  )
  CancelledAtAdapter(
    identity: RequestIdentity,
    handle: ExecutionHandle,
  )
}

Constructors

pub type CancelDecisionResult {
  CancelledDecision(
    snapshot: RequestProgressionSnapshot,
    identity: RequestIdentity,
  )
  CancelCommandDecision(
    snapshot: RequestProgressionSnapshot,
    running: Running,
    command: AdapterCommand,
  )
  CancelDecisionRejected(
    snapshot: RequestProgressionSnapshot,
    failure: CancelFailure,
  )
}

Constructors

pub type CancelFailure {
  CancelUnknownRequest(identity: RequestIdentity)
  CancelRequestAlreadyTerminal(identity: RequestIdentity)
  CancelMissingExecutionHandle(identity: RequestIdentity)
}

Constructors

pub type CompletionObservationFailure {
  CompletionUnknown(identity: RequestIdentity)
  CompletionNotRunning(identity: RequestIdentity)
  CompletionHandleMismatch(identity: RequestIdentity)
  CompletionIdentityMismatch(
    identity: RequestIdentity,
    other: RequestIdentity,
  )
  CompletionSignalMismatch(identity: RequestIdentity)
  CompletionAdapterFailureObserved(
    identity: RequestIdentity,
    detail: String,
  )
  CancellationAdapterFailureObserved(
    identity: RequestIdentity,
    detail: String,
  )
}

Constructors

pub type CompletionObservationResult(result) {
  CompletionApplied(
    snapshot: RequestProgressionSnapshot,
    identity: RequestIdentity,
    value: result,
  )
  CompletionSuperseded(
    snapshot: RequestProgressionSnapshot,
    identity: RequestIdentity,
  )
  CompletionCancelled(
    snapshot: RequestProgressionSnapshot,
    identity: RequestIdentity,
  )
  CompletionObservationFailed(
    snapshot: RequestProgressionSnapshot,
    failure: CompletionObservationFailure,
  )
}

Constructors

pub type ConfiguredSafetyLimit {
  ConfiguredSafetyLimit(resource: String, maximum: Int)
}

Constructors

  • ConfiguredSafetyLimit(resource: String, maximum: Int)
pub type CostSelection {
  ExecuteNow(
    identity: RequestIdentity,
    evidence: EvidenceVersion,
    cost: Int,
  )
  RemainPending(
    identity: RequestIdentity,
    evidence: EvidenceVersion,
    cost: Int,
  )
}

Constructors

pub type EvidenceVersion {
  EvidenceVersion(
    identifier: String,
    digest: String,
    artifact_path: String,
  )
}

Constructors

  • EvidenceVersion(
      identifier: String,
      digest: String,
      artifact_path: String,
    )
pub type ExecutionHandle {
  ExecutionHandle(value: String)
}

Constructors

  • ExecutionHandle(value: String)
pub type MeaningPermission {
  Permitted(
    identity: RequestIdentity,
    evidence: List(EvidenceVersion),
  )
  Ordered(
    identity: RequestIdentity,
    evidence: List(EvidenceVersion),
  )
  Denied(identity: RequestIdentity, reason: PermissionDenial)
}

Constructors

pub type PermissionDenial {
  Denial(String)
}

Constructors

  • Denial(String)
pub type RequestEffectClass {
  PureEffect
  OrderedEffect
}

Constructors

  • PureEffect
  • OrderedEffect
pub type RequestEntry {
  RequestEntry(
    identity: RequestIdentity,
    footprint: RequestFootprint,
    demand: ResourceDemand,
    phase: RequestPhase,
    meaning_permission: MeaningPermission,
    cost_selection: option.Option(CostSelection),
    execution_handle: option.Option(ExecutionHandle),
  )
}

Constructors

pub type RequestFootprint {
  RequestFootprint(
    reads: List(String),
    writes: List(String),
    effect_class: RequestEffectClass,
  )
}

Constructors

  • RequestFootprint(
      reads: List(String),
      writes: List(String),
      effect_class: RequestEffectClass,
    )
pub type RequestIdentity {
  RequestIdentity(
    kind: String,
    provenance: String,
    revision: Int,
  )
}

Constructors

  • RequestIdentity(kind: String, provenance: String, revision: Int)
pub type RequestInput {
  RequestInput(
    identity: RequestIdentity,
    footprint: RequestFootprint,
    demand: ResourceDemand,
    permission: MeaningPermission,
  )
}

Constructors

pub type RequestPhase {
  Pending
  Preparing
  Publishing
  Published
  Superseded
  Cancelled
  Failed
}

Constructors

  • Pending
  • Preparing
  • Publishing
  • Published
  • Superseded
  • Cancelled
  • Failed
pub type RequestPolicy {
  LatestWins
  Fifo
  AllExecute
}

Constructors

  • LatestWins
  • Fifo
  • AllExecute
pub type RequestProgressionSnapshot {
  RequestProgressionSnapshot(
    policy: RequestPolicy,
    budget: ResourceBudget,
    current_identity: option.Option(RequestIdentity),
    entries: List(RequestEntry),
    revision: Int,
  )
}

Constructors

pub type ResourceBudget {
  ResourceBudget(
    pending_maximum: ConfiguredSafetyLimit,
    in_flight_maximum: ConfiguredSafetyLimit,
    concurrent_maximum: ConfiguredSafetyLimit,
  )
}

Constructors

pub type ResourceDemand {
  ResourceDemand(pending: Int, in_flight: Int, concurrent: Int)
}

Constructors

  • ResourceDemand(pending: Int, in_flight: Int, concurrent: Int)
pub type Running {
  Running(identity: RequestIdentity, handle: ExecutionHandle)
}

Constructors

pub type StartDecisionFailure {
  StartUnknownRequest(identity: RequestIdentity)
  StartRequestNotPending(identity: RequestIdentity)
  StartPolicyOrderBlocked(identity: RequestIdentity)
  StartPermissionDenied(
    identity: RequestIdentity,
    reason: PermissionDenial,
  )
  StartPermissionIdentityMismatch(
    identity: RequestIdentity,
    other: RequestIdentity,
  )
  StartPermissionNotOrdered(identity: RequestIdentity)
  StartCostSelectionIdentityMismatch(
    identity: RequestIdentity,
    other: RequestIdentity,
  )
  StartInFlightLimitExceeded(
    demand: ResourceDemand,
    budget: ResourceBudget,
  )
  StartConcurrentLimitExceeded(
    demand: ResourceDemand,
    budget: ResourceBudget,
  )
}

Constructors

pub type StartDecisionResult {
  Execute(
    snapshot: RequestProgressionSnapshot,
    starting: Starting,
    command: AdapterCommand,
  )
  Deferred(
    snapshot: RequestProgressionSnapshot,
    accepted: Accepted,
  )
  StartDecisionRejected(
    snapshot: RequestProgressionSnapshot,
    failure: StartDecisionFailure,
  )
}

Constructors

pub type StartObservationFailure {
  StartObservationUnknownRequest(identity: RequestIdentity)
  StartRequestNotStarting(identity: RequestIdentity)
  StartIdentityMismatch(
    identity: RequestIdentity,
    other: RequestIdentity,
  )
  StartSignalMismatch(identity: RequestIdentity)
  StartAdapterFailureObserved(
    identity: RequestIdentity,
    detail: String,
  )
}

Constructors

pub type StartObservationResult {
  StartObservationPublishing(
    snapshot: RequestProgressionSnapshot,
    running: Running,
  )
  StartObservationFailed(
    snapshot: RequestProgressionSnapshot,
    failure: StartObservationFailure,
  )
}

Constructors

pub type Starting {
  Starting(identity: RequestIdentity, command: AdapterCommand)
}

Constructors

pub type SubmitFailure {
  SubmitDuplicateIdentity(identity: RequestIdentity)
  SubmitPendingLimitExceeded(
    demand: ResourceDemand,
    budget: ResourceBudget,
  )
}

Constructors

pub type SubmitResult {
  SubmitAccepted(
    snapshot: RequestProgressionSnapshot,
    accepted: Accepted,
  )
  SubmitRejected(
    snapshot: RequestProgressionSnapshot,
    failure: SubmitFailure,
  )
}

Constructors

Values

pub fn apply_completion_observation(
  snapshot: RequestProgressionSnapshot,
  running: Running,
  observed: AdapterResult(result),
) -> CompletionObservationResult(result)
pub fn apply_start_observation(
  snapshot: RequestProgressionSnapshot,
  starting: Starting,
  observed: AdapterResult(result),
) -> StartObservationResult
pub fn decide_cancel(
  snapshot: RequestProgressionSnapshot,
  identity: RequestIdentity,
) -> CancelDecisionResult
pub fn decide_start(
  snapshot: RequestProgressionSnapshot,
  accepted: Accepted,
  selection: CostSelection,
) -> StartDecisionResult
pub fn derive_concurrent(
  snapshot: RequestProgressionSnapshot,
) -> ResourceDemand
pub fn derive_in_flight(
  snapshot: RequestProgressionSnapshot,
) -> ResourceDemand
pub fn derive_pending(
  snapshot: RequestProgressionSnapshot,
) -> ResourceDemand
pub fn empty(
  policy: RequestPolicy,
  budget: ResourceBudget,
) -> RequestProgressionSnapshot
pub fn submit(
  snapshot: RequestProgressionSnapshot,
  request: RequestInput,
) -> SubmitResult
✨ Search Document