pub struct LowLevelJsonParser { /* private fields */ }
Expand description
A low-level JSON parser acting on a provided buffer.
Does not allocate except a stack to check if array and object opening and closing are properly nested.
This stack size might be limited using the method with_max_stack_size
.
use json_event_parser::{JsonEvent, LowLevelJsonParser, LowLevelJsonParserResult};
let mut reader = LowLevelJsonParser::new();
assert!(matches!(
reader.parse_next(b"{\"foo".as_slice(), false),
LowLevelJsonParserResult {
consumed_bytes: 1,
event: Some(Ok(JsonEvent::StartObject))
}
));
assert!(matches!(
reader.parse_next(b"\"foo".as_slice(), false),
LowLevelJsonParserResult {
consumed_bytes: 0,
event: None
}
));
assert!(matches!(
reader.parse_next(b"\"foo\": 1}".as_slice(), false),
LowLevelJsonParserResult {
consumed_bytes: 5,
event: Some(Ok(JsonEvent::ObjectKey(Cow::Borrowed("foo"))))
}
));
assert!(matches!(
reader.parse_next(b": 1}".as_slice(), false),
LowLevelJsonParserResult {
consumed_bytes: 3,
event: Some(Ok(JsonEvent::Number(Cow::Borrowed("1"))))
}
));
assert!(matches!(
reader.parse_next(b"}".as_slice(), false),
LowLevelJsonParserResult {
consumed_bytes: 1,
event: Some(Ok(JsonEvent::EndObject))
}
));
assert!(matches!(
reader.parse_next(b"".as_slice(), true),
LowLevelJsonParserResult {
consumed_bytes: 0,
event: Some(Ok(JsonEvent::Eof))
}
));
Implementations§
Source§impl LowLevelJsonParser
impl LowLevelJsonParser
pub const fn new() -> Self
Sourcepub fn with_max_stack_size(self, size: usize) -> Self
pub fn with_max_stack_size(self, size: usize) -> Self
Maximal allowed number of nested object and array openings. Infinite by default.
Sourcepub fn parse_next<'a>(
&mut self,
input_buffer: &'a [u8],
is_ending: bool,
) -> LowLevelJsonParserResult<'a>
pub fn parse_next<'a>( &mut self, input_buffer: &'a [u8], is_ending: bool, ) -> LowLevelJsonParserResult<'a>
Reads a new event from the data in input_buffer
.
is_ending
must be set to true if all the JSON data have been already consumed or are in input_buffer
.
pub fn read_next_event<'a>( &mut self, input_buffer: &'a [u8], is_ending: bool, ) -> LowLevelJsonParserResult<'a>
👎Deprecated: Use parse_next() instead
Trait Implementations§
Auto Trait Implementations§
impl Freeze for LowLevelJsonParser
impl RefUnwindSafe for LowLevelJsonParser
impl Send for LowLevelJsonParser
impl Sync for LowLevelJsonParser
impl Unpin for LowLevelJsonParser
impl UnwindSafe for LowLevelJsonParser
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more