boseiju/ability_tree/object/
attached_to.rs

1use crate::ability_tree::AbilityTreeNode;
2use crate::ability_tree::MAX_CHILDREN_PER_NODE;
3
4/// Object reference for the object "attached" to.
5///
6/// This only has meaning when the ability is on a card that can
7/// be attached to objects, and this references those objects.
8#[derive(serde::Serialize, serde::Deserialize)]
9#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
10pub struct ObjectAttachedTo {
11    #[cfg(feature = "spanned_tree")]
12    pub span: crate::ability_tree::span::TreeSpan,
13}
14
15impl AbilityTreeNode for ObjectAttachedTo {
16    fn node_id(&self) -> usize {
17        use crate::ability_tree::tree_node::TerminalNodeKind;
18        use idris::Idris;
19        crate::ability_tree::NodeKind::Terminal(TerminalNodeKind::ObjectAttachedTo).id()
20    }
21
22    fn children(&self) -> arrayvec::ArrayVec<&dyn AbilityTreeNode, MAX_CHILDREN_PER_NODE> {
23        arrayvec::ArrayVec::new()
24    }
25
26    fn display(&self, out: &mut crate::utils::TreeFormatter<'_>) -> std::io::Result<()> {
27        use std::io::Write;
28        write!(out, "object attached to")
29    }
30
31    fn node_tag(&self) -> &'static str {
32        "object attached to"
33    }
34
35    #[cfg(feature = "spanned_tree")]
36    fn node_span(&self) -> crate::ability_tree::span::TreeSpan {
37        self.span
38    }
39}
40
41#[cfg(feature = "parser")]
42impl crate::utils::DummyInit for ObjectAttachedTo {
43    fn dummy_init() -> Self {
44        Self {
45            #[cfg(feature = "spanned_tree")]
46            span: Default::default(),
47        }
48    }
49}