boseiju/ability_tree/ability/statik/continuous_effect/
continuous_effect_kind.rs1pub mod modify_object;
2pub mod replacement_effect;
3
4pub use modify_object::ContinuousEffectModifyObject;
5pub use replacement_effect::ContinuousEffectReplacementEvent;
6
7use crate::ability_tree::AbilityTreeNode;
8use crate::ability_tree::MAX_CHILDREN_PER_NODE;
9
10#[derive(serde::Serialize, serde::Deserialize)]
14#[derive(Debug, Clone, PartialEq, Eq)]
15pub enum ContinuousEffectKind {
16 ModifyObjectAbilities(ContinuousEffectModifyObject),
17 ReplacementEffect(ContinuousEffectReplacementEvent),
18}
19
20#[cfg(feature = "spanned_tree")]
21impl ContinuousEffectKind {
22 pub fn span(&self) -> crate::ability_tree::span::TreeSpan {
23 match self {
24 Self::ModifyObjectAbilities(child) => child.span,
25 Self::ReplacementEffect(child) => child.span,
26 }
27 }
28}
29
30impl AbilityTreeNode for ContinuousEffectKind {
31 fn node_id(&self) -> usize {
32 use idris::Idris;
33 crate::ability_tree::NodeKind::ContinuousEffectKind.id()
34 }
35
36 fn children(&self) -> arrayvec::ArrayVec<&dyn AbilityTreeNode, MAX_CHILDREN_PER_NODE> {
37 let mut children = arrayvec::ArrayVec::new_const();
38 match self {
39 Self::ModifyObjectAbilities(child) => children.push(child as &dyn AbilityTreeNode),
40 Self::ReplacementEffect(child) => children.push(child as &dyn AbilityTreeNode),
41 }
42 children
43 }
44
45 fn display(&self, out: &mut crate::utils::TreeFormatter<'_>) -> std::io::Result<()> {
46 use std::io::Write;
47 write!(out, "continuous effect kind")?;
48 out.push_final_branch()?;
49 match self {
50 Self::ModifyObjectAbilities(child) => child.display(out)?,
51 Self::ReplacementEffect(child) => child.display(out)?,
52 }
53 out.pop_branch();
54 Ok(())
55 }
56
57 fn node_tag(&self) -> &'static str {
58 "continuous effect kind"
59 }
60
61 #[cfg(feature = "spanned_tree")]
62 fn node_span(&self) -> crate::ability_tree::span::TreeSpan {
63 match self {
64 Self::ModifyObjectAbilities(child) => child.node_span(),
65 Self::ReplacementEffect(child) => child.node_span(),
66 }
67 }
68}
69
70#[cfg(feature = "parser")]
71impl crate::utils::DummyInit for ContinuousEffectKind {
72 fn dummy_init() -> Self {
73 Self::ModifyObjectAbilities(crate::utils::dummy())
74 }
75}