boseiju/lexer/tokens/intermediates/
choice_reference.rs

1#[derive(idris_derive::Idris)]
2#[derive(serde::Serialize, serde::Deserialize)]
3#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
4pub enum ChoiceReference {
5    ChosenColor {
6        #[cfg(feature = "spanned_tree")]
7        span: crate::ability_tree::span::TreeSpan,
8    },
9    HasntBeenChosen {
10        #[cfg(feature = "spanned_tree")]
11        span: crate::ability_tree::span::TreeSpan,
12    },
13}
14
15#[cfg(feature = "spanned_tree")]
16impl ChoiceReference {
17    pub fn span(&self) -> crate::ability_tree::span::TreeSpan {
18        match self {
19            Self::ChosenColor { span } => *span,
20            Self::HasntBeenChosen { span } => *span,
21        }
22    }
23}
24
25impl ChoiceReference {
26    pub fn try_from_span(span: &crate::lexer::Span) -> Option<Self> {
27        match span.text {
28            "chosen color" => Some(Self::ChosenColor {
29                #[cfg(feature = "spanned_tree")]
30                span: span.into(),
31            }),
32            "hasn't been chosen" => Some(Self::HasntBeenChosen {
33                #[cfg(feature = "spanned_tree")]
34                span: span.into(),
35            }),
36            _ => None,
37        }
38    }
39}