use json_streaming::blocking::*;
use json_streaming::shared::*;
use std::io;
use std::io::Cursor;
fn main() {
let mut buf = Vec::new();
write(&mut buf).unwrap();
let mut r = Cursor::new(buf);
read(&mut r).unwrap();
}
fn write(w: &mut impl io::Write) -> io::Result<()> {
let mut json_writer = JsonWriter::new_pretty(w);
let mut obj = JsonObject::new(&mut json_writer)?;
obj.write_string_value("name", "John Smith")?;
obj.write_u32_value("age", 49)?;
let mut colors_arr = obj.start_array("favorite-colors")?;
colors_arr.write_string_value("red")?;
colors_arr.write_string_value("blue")?;
colors_arr.write_string_value("yellow")?;
colors_arr.end()?;
obj.end()?;
Ok(())
}
fn read(r: &mut impl io::Read) -> JsonParseResult<(), io::Error> {
let mut json_reader = JsonReader::new(1024, r);
json_reader.expect_start_object()?;
loop {
match json_reader.expect_key()? {
Some("name") => {
let name = json_reader.expect_string()?;
println!("name: {}", name);
},
Some("age") => {
let age: u32 = json_reader.expect_number()?;
println!("age: {}", age);
},
Some("favorite-colors") => {
read_favorite_colors(&mut json_reader)?;
}
Some(_other) => {
return json_reader.parse_err("unexpected key parsing 'person'");
},
None => break,
}
}
Ok(())
}
fn read_favorite_colors<B: AsMut<[u8]>, R: io::Read>(r: &mut JsonReader<B, R>) -> JsonParseResult<(), io::Error> {
r.expect_start_array()?;
while let Some(color) = r.expect_string_or_end_array()? {
println!(" favorite color: {}", color);
}
Ok(())
}