boseiju/ability_tree/conditional/
object_is_of_kind.rs

1use crate::ability_tree::AbilityTreeNode;
2use crate::ability_tree::MAX_CHILDREN_PER_NODE;
3
4/// Fixme: doc
5#[derive(serde::Serialize, serde::Deserialize)]
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub struct ConditionObjectMatchSpecifiers {
8    pub object: crate::ability_tree::object::ObjectReference,
9    pub specifiers: crate::ability_tree::object::ObjectSpecifiers,
10    pub shall_match: bool,
11    #[cfg(feature = "spanned_tree")]
12    pub span: crate::ability_tree::span::TreeSpan,
13}
14
15impl crate::ability_tree::AbilityTreeNode for ConditionObjectMatchSpecifiers {
16    fn node_id(&self) -> usize {
17        use idris::Idris;
18        crate::ability_tree::NodeKind::ConditionObjectMatchSpecifier.id()
19    }
20
21    fn children(&self) -> arrayvec::ArrayVec<&dyn AbilityTreeNode, MAX_CHILDREN_PER_NODE> {
22        let mut children = arrayvec::ArrayVec::new_const();
23        children.push(&self.object as &dyn AbilityTreeNode);
24        children.push(&self.specifiers as &dyn AbilityTreeNode);
25        children
26    }
27
28    fn display(&self, out: &mut crate::utils::TreeFormatter<'_>) -> std::io::Result<()> {
29        use std::io::Write;
30        write!(out, "object matches specifiers:")?;
31        out.push_inter_branch()?;
32        self.object.display(out)?;
33        out.next_final_branch()?;
34        self.specifiers.display(out)?;
35        out.pop_branch();
36        Ok(())
37    }
38
39    fn node_tag(&self) -> &'static str {
40        "condition: object is of kind"
41    }
42
43    #[cfg(feature = "spanned_tree")]
44    fn node_span(&self) -> crate::ability_tree::span::TreeSpan {
45        self.span
46    }
47}
48
49#[cfg(feature = "parser")]
50impl crate::utils::DummyInit for ConditionObjectMatchSpecifiers {
51    fn dummy_init() -> Self {
52        Self {
53            object: crate::utils::dummy(),
54            specifiers: crate::utils::dummy(),
55            shall_match: false,
56            #[cfg(feature = "spanned_tree")]
57            span: Default::default(),
58        }
59    }
60}