jsonc_parser/
tokens.rs

1use super::common::Range;
2use super::common::Ranged;
3use std::borrow::Cow;
4
5/// A token found while scanning.
6#[derive(Debug, PartialEq, Clone)]
7pub enum Token<'a> {
8  OpenBrace,
9  CloseBrace,
10  OpenBracket,
11  CloseBracket,
12  Comma,
13  Colon,
14  String(Cow<'a, str>),
15  Word(&'a str),
16  Boolean(bool),
17  Number(&'a str),
18  Null,
19  CommentLine(&'a str),
20  CommentBlock(&'a str),
21}
22
23impl<'a> Token<'a> {
24  pub fn as_str(&self) -> &str {
25    match self {
26      Token::OpenBrace => "{",
27      Token::CloseBrace => "}",
28      Token::OpenBracket => "[",
29      Token::CloseBracket => "]",
30      Token::Comma => ",",
31      Token::Colon => ":",
32      Token::String(value) => value,
33      Token::Word(value) => value,
34      Token::Boolean(value) => {
35        if *value {
36          "true"
37        } else {
38          "false"
39        }
40      }
41      Token::Number(value) => value,
42      Token::Null => "null",
43      Token::CommentLine(value) => value,
44      Token::CommentBlock(value) => value,
45    }
46  }
47}
48
49/// A token with positional information.
50pub struct TokenAndRange<'a> {
51  pub range: Range,
52  pub token: Token<'a>,
53}
54
55impl<'a> Ranged for TokenAndRange<'a> {
56  fn range(&self) -> Range {
57    self.range
58  }
59}