chisel_lexers/json/
tokens.rs1use crate::json::numerics::LazyNumeric;
2use chisel_common::char::span::Span;
3use std::fmt::{Display, Formatter};
4
5#[derive(Debug, Clone, PartialEq)]
7pub enum Token {
8 StartObject,
10 EndObject,
12 StartArray,
14 EndArray,
16 Colon,
18 Comma,
20 Str(String),
22 Float(f64),
24 Integer(i64),
26 LazyNumeric(LazyNumeric),
28 Null,
30 Boolean(bool),
32 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
59pub type PackedToken<'a> = (Token, Span);