boseiju/lexer/tokens/intermediates/
count_specifier.rs1#[derive(idris_derive::Idris)]
2#[derive(serde::Serialize, serde::Deserialize)]
3#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
4pub enum CountSpecifier {
5 All {
6 #[cfg(feature = "spanned_tree")]
7 span: crate::ability_tree::span::TreeSpan,
8 },
9 AllOthers {
10 #[cfg(feature = "spanned_tree")]
11 span: crate::ability_tree::span::TreeSpan,
12 },
13 Target {
14 #[cfg(feature = "spanned_tree")]
15 span: crate::ability_tree::span::TreeSpan,
16 },
17}
18
19#[cfg(feature = "spanned_tree")]
20impl CountSpecifier {
21 pub fn span(&self) -> crate::ability_tree::span::TreeSpan {
22 match self {
23 Self::All { span } => *span,
24 Self::AllOthers { span } => *span,
25 Self::Target { span } => *span,
26 }
27 }
28}
29
30impl CountSpecifier {
31 pub fn try_from_span(span: &crate::lexer::Span) -> Option<Self> {
32 match span.text {
33 "all" | "each" => Some(Self::All {
34 #[cfg(feature = "spanned_tree")]
35 span: span.into(),
36 }),
37 "target" | "targets" => Some(Self::Target {
38 #[cfg(feature = "spanned_tree")]
39 span: span.into(),
40 }),
41 "all other" | "each other" => Some(Self::AllOthers {
42 #[cfg(feature = "spanned_tree")]
43 span: span.into(),
44 }),
45 _ => None,
46 }
47 }
48}