Skip to main content

made_core/entities/ceremony_instance/fold/
start.rs

1use std::collections::{BTreeMap, BTreeSet};
2
3use crate::entities::ceremony_events::CeremonyInstanceStarted;
4use crate::entities::CeremonyInstance;
5use crate::value_objects::StepExecutionRecord;
6use crate::value_objects::{StateIteration, StateVisit};
7
8impl CeremonyInstance {
9    /// Open the session the event describes: its initial state, one
10    /// pending record per step the definition declared, and nothing
11    /// else yet. Needs no definition, because the event carries what
12    /// starting derived from one.
13    #[must_use]
14    pub fn from_started(started: &CeremonyInstanceStarted) -> Self {
15        Self {
16            id: started.ceremony_id.clone(),
17            definition_name: started.definition_name.clone(),
18            definition_version: started.definition_version.clone(),
19            current_state: started.initial_state.clone(),
20            current_state_iteration: StateIteration::FIRST,
21            current_state_visit: StateVisit::FIRST,
22            step_records: started
23                .step_ids
24                .iter()
25                .map(|step_id| (step_id.clone(), StepExecutionRecord::pending()))
26                .collect(),
27            step_record_history: BTreeMap::new(),
28            interventions: Vec::new(),
29            guard_deferrals: Vec::new(),
30            guard_approvals: Vec::new(),
31            transitions: Vec::new(),
32            reasons: Vec::new(),
33            participant_bindings: BTreeMap::new(),
34            context: started.context.clone(),
35            recollection: None,
36            idempotency_keys: BTreeSet::new(),
37            created_at: started.created_at,
38            updated_at: started.created_at,
39            completed_at: None,
40            bound_definition: started.bound_definition,
41            lineage: started.lineage.clone(),
42            budget_account_id: started.budget_account_id.clone(),
43            child_groups: BTreeMap::new(),
44            lifecycle: crate::value_objects::CeremonyLifecycle::default(),
45            ceremony_deadline: started.ceremony_deadline,
46            state_deadline: started.state_deadline.clone(),
47            step_deadlines: BTreeMap::new(),
48            retired_deadline_claims: BTreeMap::new(),
49            late_step_results: BTreeMap::new(),
50            execution_receipt_links: BTreeMap::new(),
51            execution_receipt_adoptions: BTreeMap::new(),
52        }
53    }
54}