chisel_json/parsers/
sax_events.rs1use std::borrow::Cow;
5use std::fmt::Display;
6
7use crate::coords::Span;
8use crate::pointers::pointer::JsonPointer;
9
10#[derive(PartialEq)]
12pub enum Match<'a> {
13 StartOfInput,
15 EndOfInput,
17 StartObject,
19 ObjectKey(Cow<'a, str>),
21 EndObject,
23 StartArray,
25 EndArray,
27 String(Cow<'a, str>),
29 Integer(i64),
31 Float(f64),
33 Boolean(bool),
35 Null,
37}
38
39impl<'a> Display for Match<'a> {
40 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
41 match self {
42 Match::StartOfInput => write!(f, "StartOfInput"),
43 Match::EndOfInput => write!(f, "EndOfInput"),
44 Match::StartObject => write!(f, "StartObject"),
45 Match::ObjectKey(_) => write!(f, "ObjectKey"),
46 Match::EndObject => write!(f, "EndObject"),
47 Match::StartArray => write!(f, "StartArray"),
48 Match::EndArray => write!(f, "EndArray"),
49 Match::String(value) => write!(f, "String({})", value),
50 Match::Integer(value) => write!(f, "Integer({})", value),
51 Match::Float(value) => write!(f, "Float({})", value),
52 Match::Boolean(b) => write!(f, "Boolean({})", b),
53 Match::Null => write!(f, "Null"),
54 }
55 }
56}
57
58pub struct Event<'a> {
60 pub matched: Match<'a>,
62
63 pub span: Span,
65
66 pub pointer: Option<&'a JsonPointer<'a>>,
68}
69
70impl<'a> Event<'a> {
71 fn has_pointer(&self) -> bool {
73 self.pointer.is_some()
74 }
75}
76
77impl<'a> Display for Event<'a> {
78 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
79 if self.pointer.is_some() {
80 write!(
81 f,
82 "Event[{}, {}, {}]",
83 self.matched,
84 self.span,
85 self.pointer.unwrap()
86 )
87 } else {
88 write!(f, "Event[{}, {}]", self.matched, self.span)
89 }
90 }
91}