graph_auth/resource_path/string/
token.rs1use 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}