use std::io::{Cursor, Read};
use eventson::{Event, Number, Parser};
struct FooBar {
foo: u64,
bar: u64,
}
fn main() {
let input = r#"
{ "foo": 1, "bar": 3 }
{ "foo": 10, "bar": 12}
{ "foo": 8, "bar": 14}
"#;
let reader = Cursor::new(input);
let mut parser = eventson::Parser::new(reader, 16, 8);
let mut foo_bar = FooBar { foo: 0, bar: 0 };
let mut foo_bar_diff = 0;
let mut count = 0;
while let Ok(event) = parser.next() {
match event {
Event::StartObject => {
continue;
}
Event::ObjectKey(b"foo") => {
foo_bar.foo = expect_float(&mut parser);
}
Event::ObjectKey(b"bar") => {
foo_bar.bar = expect_float(&mut parser);
}
Event::EndObject => {
foo_bar_diff += foo_bar.bar - foo_bar.foo;
count += 1;
}
Event::Eof => {
break;
}
_ => {
panic!("Unexpected event: {:?}", event);
}
}
}
let very_useful_average = foo_bar_diff / count;
println!("{very_useful_average}")
}
fn expect_float<R: Read>(parser: &mut Parser<R>) -> u64 {
match parser.next().unwrap() {
Event::Number(Number::PositiveInt(n)) => n,
event => {
panic!("Unexpected event: {:?}", event);
}
}
}