use json_streaming::blocking::*;
use json_streaming::shared::*;
use std::io;
use std::io::Cursor;
fn main() {
let json_lines = write().unwrap();
read(json_lines).unwrap();
}
fn read(json_lines: String) -> JsonParseResult<(), io::Error> {
let buf = json_lines.into_bytes();
let mut read = Cursor::new(buf);
let mut json_reader = JsonReader::new_with_lenient_comma_handling(1024, &mut read);
while let JsonReadToken::StartObject = json_reader.next()? {
println!("start object");
loop {
match json_reader.next()? {
JsonReadToken::Key("a") => println!(" a={:?}", json_reader.expect_string()?),
JsonReadToken::Key("b") => println!(" b={:?}", json_reader.expect_number::<u32>()?),
JsonReadToken::EndObject => break,
_ => return Err(JsonParseError::Parse(JsonReadToken::EndObject.kind(), json_reader.location())),
}
}
println!("end object");
}
Ok(())
}
fn write() -> io::Result<String> {
let mut buf = Vec::new();
let mut writer = JsonWriter::new_compact(&mut buf);
let mut obj = JsonObject::new(&mut writer)?;
obj.write_string_value("a", "yo")?;
obj.write_u32_value("b", 123)?;
obj.end()?;
writer.write_bytes(b"\n")?;
let mut obj = JsonObject::new(&mut writer)?;
obj.write_u32_value("b", 456)?;
obj.write_string_value("a", "hey")?;
obj.end()?;
writer.write_bytes(b"\n")?;
let buf = writer.into_inner().unwrap().to_vec();
let s = String::from_utf8(buf).unwrap();
Ok(s)
}