boseiju/ability_tree/imperative/
destroy_imperative.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 DestroyImperative {
8 pub object: crate::ability_tree::object::ObjectReference,
9 #[cfg(feature = "spanned_tree")]
10 pub span: crate::ability_tree::span::TreeSpan,
11}
12
13impl crate::ability_tree::AbilityTreeNode for DestroyImperative {
14 fn node_id(&self) -> usize {
15 use idris::Idris;
16 crate::ability_tree::NodeKind::DestroyImperative.id()
17 }
18
19 fn children(&self) -> arrayvec::ArrayVec<&dyn AbilityTreeNode, MAX_CHILDREN_PER_NODE> {
20 let mut children = arrayvec::ArrayVec::new_const();
21 children.push(&self.object as &dyn AbilityTreeNode);
22 children
23 }
24
25 fn display(&self, out: &mut crate::utils::TreeFormatter<'_>) -> std::io::Result<()> {
26 use std::io::Write;
27 write!(out, "destroy:")?;
28 out.push_final_branch()?;
29 write!(out, "object:")?;
30 out.push_final_branch()?;
31 self.object.display(out)?;
32 out.pop_branch();
33 out.pop_branch();
34 Ok(())
35 }
36
37 fn node_tag(&self) -> &'static str {
38 "destroy imperative"
39 }
40
41 #[cfg(feature = "spanned_tree")]
42 fn node_span(&self) -> crate::ability_tree::span::TreeSpan {
43 self.span
44 }
45}
46
47#[cfg(feature = "parser")]
48impl crate::utils::DummyInit for DestroyImperative {
49 fn dummy_init() -> Self {
50 Self {
51 object: crate::utils::dummy(),
52 #[cfg(feature = "spanned_tree")]
53 span: Default::default(),
54 }
55 }
56}