Skip to main content

made_core/ports/
ceremony_execution_observation.rs

1use time::OffsetDateTime;
2
3use crate::value_objects::{
4    ArtifactRef, ExternalOperationId, MeasuredBudgetQuantities, StepClaimFence, StepResult,
5};
6
7/// Terminal observation returned by an execution connector.
8#[derive(Debug, Clone, PartialEq, Eq)]
9pub struct CeremonyExecutionObservation {
10    producer_claim_fence: StepClaimFence,
11    external_operation_id: Option<ExternalOperationId>,
12    result: StepResult,
13    artifacts: Vec<ArtifactRef>,
14    budget_measurement: MeasuredBudgetQuantities,
15    observed_at: OffsetDateTime,
16}
17
18impl CeremonyExecutionObservation {
19    #[must_use]
20    pub fn new(
21        producer_claim_fence: StepClaimFence,
22        external_operation_id: Option<ExternalOperationId>,
23        result: StepResult,
24        artifacts: Vec<ArtifactRef>,
25        observed_at: OffsetDateTime,
26    ) -> Self {
27        Self {
28            producer_claim_fence,
29            external_operation_id,
30            result,
31            artifacts,
32            budget_measurement: MeasuredBudgetQuantities::default(),
33            observed_at,
34        }
35    }
36
37    #[must_use]
38    pub fn with_budget_measurement(mut self, measured: MeasuredBudgetQuantities) -> Self {
39        self.budget_measurement = measured;
40        self
41    }
42
43    #[must_use]
44    pub const fn producer_claim_fence(&self) -> &StepClaimFence {
45        &self.producer_claim_fence
46    }
47
48    #[must_use]
49    pub const fn external_operation_id(&self) -> Option<&ExternalOperationId> {
50        self.external_operation_id.as_ref()
51    }
52
53    #[must_use]
54    pub const fn result(&self) -> &StepResult {
55        &self.result
56    }
57
58    #[must_use]
59    pub fn artifacts(&self) -> &[ArtifactRef] {
60        &self.artifacts
61    }
62
63    #[must_use]
64    pub const fn observed_at(&self) -> OffsetDateTime {
65        self.observed_at
66    }
67
68    #[must_use]
69    pub const fn budget_measurement(&self) -> MeasuredBudgetQuantities {
70        self.budget_measurement
71    }
72
73    #[must_use]
74    pub fn into_parts(
75        self,
76    ) -> (
77        StepClaimFence,
78        Option<ExternalOperationId>,
79        StepResult,
80        Vec<ArtifactRef>,
81        MeasuredBudgetQuantities,
82        OffsetDateTime,
83    ) {
84        (
85            self.producer_claim_fence,
86            self.external_operation_id,
87            self.result,
88            self.artifacts,
89            self.budget_measurement,
90            self.observed_at,
91        )
92    }
93}