#![allow(clippy::approx_constant)]
use zjson::{any::Any, document::Document};
fn main() {
let json = r#"{
"one": 1,
"array": [true, false, null],
"object": {"pi": 3.14, "exp": 1e5, "ignore": "this"}
}"#;
let mut document = Document::new(json);
let mut root = document
.next()
.expect("failed to parse document")
.and_then(Any::object)
.expect("failed to get an object from the document");
let element = root.next().expect("failed to parse object");
let Some((key, Any::Number(mut one))) = element else {
panic!("failed to get a number from the object");
};
let one = one.get().expect("failed to parse number");
assert_eq!(key, "one");
assert_eq!(one.as_u8(), Some(1));
let element = root.next().expect("failed to parse object");
let Some((key, Any::Array(mut array))) = element else {
panic!("failed to get an array from the object");
};
assert_eq!(key, "array");
let r#true = array
.next()
.expect("failed to parse array")
.and_then(Any::literal)
.expect("failed to get a true value from the array")
.get()
.expect("failed to parse a true value");
assert_eq!(r#true, true);
let r#false = array
.next()
.expect("failed to parse array")
.and_then(Any::literal)
.expect("failed to get a false value from the array")
.get()
.expect("failed to parse a false value");
assert_eq!(r#false, false);
let null = array
.next()
.expect("failed to parse array")
.and_then(Any::literal)
.expect("failed to get a null value from the array")
.get()
.expect("failed to parse a null value");
assert_eq!(null, None);
let array_element = array.next().expect("failed to parse array");
assert!(array_element.is_none());
let element = root.next().expect("failed to parse object");
let Some((key, Any::Object(mut object))) = element else {
panic!("failed to get an object from the object");
};
assert_eq!(key, "object");
let object_element = object.next().expect("failed to parse inner object");
let Some((key, Any::Number(mut pi))) = object_element else {
panic!("failed to get a number from the inner object");
};
let pi = pi.get().expect("failed to parse a number");
assert_eq!(key, "pi");
assert_eq!(pi, 3.14);
let object_element = object.next().expect("failed to parse inner object");
let Some((key, Any::Number(mut exp))) = object_element else {
panic!("failed to get a number from the inner object");
};
let exp = exp.get().expect("failed to parse a number");
assert_eq!(key, "exp");
assert_eq!(exp.as_f32(), 1e5);
object.finish().expect("failed to parse inner object");
root.finish().expect("failed to parse object");
document.finish().expect("failed to parse document");
}
#[test]
fn test() {
main();
}