boseiju/ability_tree/terminals/
spell_property.rs1use crate::lexer::IntoToken;
2
3#[derive(idris_derive::Idris)]
4#[derive(serde::Serialize, serde::Deserialize)]
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
6pub enum SpellProperty {
7 Countered {
8 #[cfg(feature = "spanned_tree")]
9 span: crate::ability_tree::span::TreeSpan,
10 },
11 Kicked {
12 #[cfg(feature = "spanned_tree")]
13 span: crate::ability_tree::span::TreeSpan,
14 },
15}
16
17#[cfg(feature = "spanned_tree")]
18impl SpellProperty {
19 pub fn span(&self) -> crate::ability_tree::span::TreeSpan {
20 match self {
21 Self::Countered { span } => *span,
22 Self::Kicked { span } => *span,
23 }
24 }
25}
26
27impl std::fmt::Display for SpellProperty {
28 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
29 match self {
30 SpellProperty::Countered { .. } => write!(f, "countered"),
31 SpellProperty::Kicked { .. } => write!(f, "kicked"),
32 }
33 }
34}
35
36#[cfg(feature = "lexer")]
37impl IntoToken for SpellProperty {
38 fn try_from_span(span: &crate::lexer::Span) -> Option<Self> {
39 match span.text {
40 "countered" => Some(SpellProperty::Countered {
41 #[cfg(feature = "spanned_tree")]
42 span: span.into(),
43 }),
44 "kicked" => Some(SpellProperty::Kicked {
45 #[cfg(feature = "spanned_tree")]
46 span: span.into(),
47 }),
48 _ => None,
49 }
50 }
51}