boseiju/lexer/tokens/intermediates/
player_properties.rs1#[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}