chisel_lexers/json/
tokens.rs

1use crate::json::numerics::LazyNumeric;
2use chisel_common::char::span::Span;
3use std::fmt::{Display, Formatter};
4
5/// Enumeration of generated JSON tokens
6#[derive(Debug, Clone, PartialEq)]
7pub enum Token {
8    /// Start of a JSON object
9    StartObject,
10    /// End of a JSON object
11    EndObject,
12    /// Start of a JSON array
13    StartArray,
14    /// End of a JSON array
15    EndArray,
16    /// A colon (KV separator)
17    Colon,
18    /// A lowly comma
19    Comma,
20    /// A string value
21    Str(String),
22    /// A float value
23    Float(f64),
24    /// An integral value
25    Integer(i64),
26    /// A lazy numeric value
27    LazyNumeric(LazyNumeric),
28    /// A null value
29    Null,
30    /// A boolean value (true/false)
31    Boolean(bool),
32    /// The end of input token
33    EndOfInput,
34}
35
36impl Display for Token {
37    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
38        match self {
39            Token::StartObject => write!(f, "StartObject"),
40            Token::EndObject => write!(f, "EndObject"),
41            Token::StartArray => write!(f, "StartArray"),
42            Token::EndArray => write!(f, "EndArray"),
43            Token::Colon => write!(f, "Colon"),
44            Token::Comma => write!(f, "Comma"),
45            Token::Str(str) => write!(f, "String(\"{}\")", str),
46            Token::Float(num) => write!(f, "Float({})", num),
47            Token::Integer(num) => write!(f, "Integer({})", num),
48            Token::LazyNumeric(lazy) => {
49                let value: f64 = lazy.into();
50                write!(f, "Lazy({})", value)
51            }
52            Token::Null => write!(f, "Null"),
53            Token::Boolean(bool) => write!(f, "Boolean({})", bool),
54            Token::EndOfInput => write!(f, "EndOfInput"),
55        }
56    }
57}
58
59/// A packed token consists of a [Token] and the [Span] associated with it
60pub type PackedToken<'a> = (Token, Span);