boseiju/ability_tree/event/replacement/
source_ref.rs

1use crate::ability_tree::AbilityTreeNode;
2use crate::ability_tree::MAX_CHILDREN_PER_NODE;
3
4/// Fixme: doc
5#[derive(idris_derive::Idris)]
6#[derive(serde::Serialize, serde::Deserialize)]
7#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum EventSourceReference {
9    ThatEvent {
10        #[cfg(feature = "spanned_tree")]
11        span: crate::ability_tree::span::TreeSpan,
12    },
13}
14
15#[cfg(feature = "spanned_tree")]
16impl EventSourceReference {
17    pub fn span(&self) -> crate::ability_tree::span::TreeSpan {
18        match self {
19            Self::ThatEvent { span } => *span,
20        }
21    }
22}
23
24impl AbilityTreeNode for EventSourceReference {
25    fn node_id(&self) -> usize {
26        use idris::Idris;
27        crate::ability_tree::NodeKind::EventSourceReferenceIdMarker.id()
28    }
29
30    fn children(&self) -> arrayvec::ArrayVec<&dyn AbilityTreeNode, MAX_CHILDREN_PER_NODE> {
31        use crate::ability_tree::NodeKind;
32        use idris::Idris;
33
34        let mut children = arrayvec::ArrayVec::new_const();
35        let child_id = NodeKind::EventSourceReference(self.clone()).id();
36        let child = crate::ability_tree::dummy_terminal::TreeNodeDummyTerminal::new(child_id);
37        children.push(child as &dyn AbilityTreeNode);
38        children
39    }
40
41    fn display(&self, out: &mut crate::utils::TreeFormatter<'_>) -> std::io::Result<()> {
42        use std::io::Write;
43        write!(out, "{self}")
44    }
45
46    fn node_tag(&self) -> &'static str {
47        "event source reference"
48    }
49
50    #[cfg(feature = "spanned_tree")]
51    fn node_span(&self) -> crate::ability_tree::span::TreeSpan {
52        match self {
53            Self::ThatEvent { span } => *span,
54        }
55    }
56}
57
58impl std::fmt::Display for EventSourceReference {
59    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
60        match self {
61            Self::ThatEvent { .. } => write!(f, "replaced event"),
62        }
63    }
64}
65
66#[cfg(feature = "parser")]
67impl crate::utils::DummyInit for EventSourceReference {
68    fn dummy_init() -> Self {
69        Self::ThatEvent {
70            #[cfg(feature = "spanned_tree")]
71            span: Default::default(),
72        }
73    }
74}