boseiju/lexer/tokens/intermediates/
player_properties.rs

1#[derive(idris_derive::Idris)]
2#[derive(serde::Serialize, serde::Deserialize)]
3#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
4pub enum PlayerProperties {
5    HandSize {
6        #[cfg(feature = "spanned_tree")]
7        span: crate::ability_tree::span::TreeSpan,
8    },
9    LifeTotal {
10        #[cfg(feature = "spanned_tree")]
11        span: crate::ability_tree::span::TreeSpan,
12    },
13    MaximumHandSize {
14        #[cfg(feature = "spanned_tree")]
15        span: crate::ability_tree::span::TreeSpan,
16    },
17    StartingLifeTotal {
18        #[cfg(feature = "spanned_tree")]
19        span: crate::ability_tree::span::TreeSpan,
20    },
21    OpeningHand {
22        #[cfg(feature = "spanned_tree")]
23        span: crate::ability_tree::span::TreeSpan,
24    },
25}
26
27#[cfg(feature = "spanned_tree")]
28impl PlayerProperties {
29    pub fn span(&self) -> crate::ability_tree::span::TreeSpan {
30        match self {
31            Self::HandSize { span } => *span,
32            Self::LifeTotal { span } => *span,
33            Self::MaximumHandSize { span } => *span,
34            Self::StartingLifeTotal { span } => *span,
35            Self::OpeningHand { span } => *span,
36        }
37    }
38}
39
40impl PlayerProperties {
41    pub fn try_from_span(span: &crate::lexer::Span) -> Option<Self> {
42        match span.text {
43            "hand size" => Some(Self::HandSize {
44                #[cfg(feature = "spanned_tree")]
45                span: span.into(),
46            }),
47            "life total" => Some(Self::LifeTotal {
48                #[cfg(feature = "spanned_tree")]
49                span: span.into(),
50            }),
51            "maxmimum hand size" => Some(Self::MaximumHandSize {
52                #[cfg(feature = "spanned_tree")]
53                span: span.into(),
54            }),
55            "starting life total" => Some(Self::StartingLifeTotal {
56                #[cfg(feature = "spanned_tree")]
57                span: span.into(),
58            }),
59            "opening hand" => Some(Self::OpeningHand {
60                #[cfg(feature = "spanned_tree")]
61                span: span.into(),
62            }),
63            _ => None,
64        }
65    }
66}