boseiju/ability_tree/event/
create_token_event.rs

1use super::*;
2use crate::ability_tree::AbilityTreeNode;
3use crate::ability_tree::MAX_CHILDREN_PER_NODE;
4
5/// Fixme: doc
6#[derive(serde::Serialize, serde::Deserialize)]
7#[derive(Debug, Clone, PartialEq, Eq)]
8pub struct CreateTokensEvent {
9    pub source: source::EventSource,
10    pub quantity: crate::ability_tree::number::Number,
11    pub token_specifiers: Option<crate::ability_tree::object::ObjectSpecifiers>,
12    #[cfg(feature = "spanned_tree")]
13    pub span: crate::ability_tree::span::TreeSpan,
14}
15
16impl AbilityTreeNode for CreateTokensEvent {
17    fn node_id(&self) -> usize {
18        use idris::Idris;
19        crate::ability_tree::NodeKind::CreateTokensEvent.id()
20    }
21
22    fn children(&self) -> arrayvec::ArrayVec<&dyn AbilityTreeNode, MAX_CHILDREN_PER_NODE> {
23        let mut children = arrayvec::ArrayVec::new_const();
24        children.push(&self.source as &dyn AbilityTreeNode);
25        children.push(&self.quantity as &dyn AbilityTreeNode);
26        match self.token_specifiers.as_ref() {
27            Some(specifiers) => children.push(specifiers as &dyn AbilityTreeNode),
28            None => {
29                let dummy = crate::ability_tree::dummy_terminal::TreeNodeDummyTerminal::none_node();
30                children.push(dummy as &dyn AbilityTreeNode)
31            }
32        }
33        children
34    }
35
36    fn display(&self, out: &mut crate::utils::TreeFormatter<'_>) -> std::io::Result<()> {
37        use std::io::Write;
38        write!(out, "create tokens")?;
39        out.push_inter_branch()?;
40        write!(out, "token creation source:")?;
41        out.push_final_branch()?;
42        self.source.display(out)?;
43        out.pop_branch();
44        out.next_inter_branch()?;
45        write!(out, "amount:")?;
46        out.push_final_branch()?;
47        self.quantity.display(out)?;
48        out.pop_branch();
49        out.next_final_branch()?;
50        match self.token_specifiers.as_ref() {
51            Some(specifiers) => {
52                write!(out, "specifiers: ")?;
53                specifiers.display(out)?;
54            }
55            None => write!(out, "specifiers: none")?,
56        }
57        out.pop_branch();
58        Ok(())
59    }
60
61    fn node_tag(&self) -> &'static str {
62        "create token event"
63    }
64
65    #[cfg(feature = "spanned_tree")]
66    fn node_span(&self) -> crate::ability_tree::span::TreeSpan {
67        self.span
68    }
69}
70
71#[cfg(feature = "parser")]
72impl crate::utils::DummyInit for CreateTokensEvent {
73    fn dummy_init() -> Self {
74        Self {
75            source: crate::utils::dummy(),
76            quantity: crate::utils::dummy(),
77            token_specifiers: crate::utils::dummy(),
78            #[cfg(feature = "spanned_tree")]
79            span: Default::default(),
80        }
81    }
82}