boseiju/ability_tree/event/replacement/
source_ref.rs1use crate::ability_tree::AbilityTreeNode;
2use crate::ability_tree::MAX_CHILDREN_PER_NODE;
3
4#[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}