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