made_core/value_objects/ceremony/
ceremony_transition.rs1use 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}