graph_auth/resource_path/string/
token.rs

1use std::ops::Range;
2
3use serde_json::Number;
4
5use crate::resource_path::string::lexer_utils::LocatedSpan;
6use crate::resource_path::string::range_ex::AsRange;
7
8#[derive(Clone, Debug)]
9pub struct Token<'a> {
10    pub span: Span<'a>,
11    pub value: TokenValue,
12}
13
14#[derive(Clone, Debug)]
15pub struct Span<'a> {
16    pub range: Range<usize>,
17    pub fragment: &'a str,
18}
19
20#[derive(Clone, Debug, Eq, PartialEq)]
21pub enum TokenValue {
22    Whitespace,
23    Scope,
24    Wildcard,
25    LCurly,
26    RCurly,
27    LParen,
28    RParen,
29    Colon,
30    Comma,
31    LitBool(bool),
32    LitNum(Number),
33    LitStr(String),
34    Ident(String),
35}
36
37impl<'a> Token<'a> {
38    pub fn new(span: LocatedSpan<'a>, value: TokenValue) -> Self {
39        Token {
40            span: span.into(),
41            value,
42        }
43    }
44}
45
46impl<'a> From<LocatedSpan<'a>> for Span<'a> {
47    fn from(s: LocatedSpan<'a>) -> Self {
48        Span {
49            range: s.as_range(),
50            fragment: s.fragment(),
51        }
52    }
53}