Skip to main content

made_core/value_objects/ceremony/
ceremony_transition.rs

1use std::collections::BTreeSet;
2
3use serde::{Deserialize, Serialize};
4
5use crate::error::DomainError;
6
7use super::{GuardName, StateId, TransitionTrigger};
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
10pub struct CeremonyTransition {
11    from: StateId,
12    to: StateId,
13    trigger: TransitionTrigger,
14    required_guards: BTreeSet<GuardName>,
15}
16
17impl CeremonyTransition {
18    pub fn new(
19        from: StateId,
20        to: StateId,
21        trigger: TransitionTrigger,
22        required_guards: impl IntoIterator<Item = GuardName>,
23    ) -> Result<Self, DomainError> {
24        let required_guards = required_guards.into_iter().collect();
25        Ok(Self {
26            from,
27            to,
28            trigger,
29            required_guards,
30        })
31    }
32
33    #[must_use]
34    pub fn from(&self) -> &StateId {
35        &self.from
36    }
37
38    #[must_use]
39    pub fn to(&self) -> &StateId {
40        &self.to
41    }
42
43    #[must_use]
44    pub fn trigger(&self) -> &TransitionTrigger {
45        &self.trigger
46    }
47
48    #[must_use]
49    pub fn required_guards(&self) -> &BTreeSet<GuardName> {
50        &self.required_guards
51    }
52}