Skip to main content

made_core/value_objects/ceremony/
planned_child.rs

1use serde::{Deserialize, Serialize};
2use time::OffsetDateTime;
3
4use crate::value_objects::SessionRecollection;
5
6use super::{
7    CeremonyContext, CeremonyDefinitionDigest, CeremonyId, CeremonyLineage, CeremonyName,
8    CeremonyVersion, ChildPosition,
9};
10use crate::value_objects::BudgetAccountId;
11
12#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
13pub struct PlannedChild {
14    child_id: CeremonyId,
15    position: ChildPosition,
16    ceremony: CeremonyName,
17    version: CeremonyVersion,
18    digest: CeremonyDefinitionDigest,
19    context: CeremonyContext,
20    lineage: CeremonyLineage,
21    #[serde(default, skip_serializing_if = "Option::is_none")]
22    recollection: Option<SessionRecollection>,
23    #[serde(default, skip_serializing_if = "Option::is_none")]
24    budget_account_id: Option<BudgetAccountId>,
25    #[serde(with = "time::serde::rfc3339")]
26    opened_at: OffsetDateTime,
27}
28
29impl PlannedChild {
30    #[allow(clippy::too_many_arguments)]
31    #[must_use]
32    pub fn new(
33        child_id: CeremonyId,
34        position: ChildPosition,
35        ceremony: CeremonyName,
36        version: CeremonyVersion,
37        digest: CeremonyDefinitionDigest,
38        context: CeremonyContext,
39        lineage: CeremonyLineage,
40        recollection: Option<SessionRecollection>,
41        opened_at: OffsetDateTime,
42    ) -> Self {
43        Self {
44            child_id,
45            position,
46            ceremony,
47            version,
48            digest,
49            context,
50            lineage,
51            recollection,
52            budget_account_id: None,
53            opened_at,
54        }
55    }
56
57    #[must_use]
58    pub fn with_budget_account_id(mut self, account_id: Option<BudgetAccountId>) -> Self {
59        self.budget_account_id = account_id;
60        self
61    }
62    #[must_use]
63    pub fn child_id(&self) -> &CeremonyId {
64        &self.child_id
65    }
66    #[must_use]
67    pub const fn position(&self) -> ChildPosition {
68        self.position
69    }
70    #[must_use]
71    pub fn ceremony(&self) -> &CeremonyName {
72        &self.ceremony
73    }
74    #[must_use]
75    pub fn version(&self) -> &CeremonyVersion {
76        &self.version
77    }
78    #[must_use]
79    pub const fn digest(&self) -> CeremonyDefinitionDigest {
80        self.digest
81    }
82    #[must_use]
83    pub fn context(&self) -> &CeremonyContext {
84        &self.context
85    }
86    #[must_use]
87    pub fn lineage(&self) -> &CeremonyLineage {
88        &self.lineage
89    }
90    #[must_use]
91    pub fn recollection(&self) -> Option<&SessionRecollection> {
92        self.recollection.as_ref()
93    }
94    #[must_use]
95    pub fn budget_account_id(&self) -> Option<&BudgetAccountId> {
96        self.budget_account_id.as_ref()
97    }
98    #[must_use]
99    pub const fn opened_at(&self) -> OffsetDateTime {
100        self.opened_at
101    }
102}