1#![allow(clippy::approx_constant)]
2
3use zjson::{any::Any, document::Document};
4
5fn main() {
6 let json = r#"{
7 "one": 1,
8 "array": [true, false, null],
9 "object": {"pi": 3.14, "exp": 1e5, "ignore": "this"}
10 }"#;
11
12 let mut document = Document::new(json);
13
14 let mut root = document
16 .next()
17 .expect("failed to parse document")
18 .and_then(Any::object)
19 .expect("failed to get an object from the document");
20
21 let element = root.next().expect("failed to parse object");
23 let Some((key, Any::Number(mut one))) = element else {
24 panic!("failed to get a number from the object");
25 };
26 let one = one.get().expect("failed to parse number");
27
28 assert_eq!(key, "one");
29 assert_eq!(one.as_u8(), Some(1));
30
31 let element = root.next().expect("failed to parse object");
33 let Some((key, Any::Array(mut array))) = element else {
34 panic!("failed to get an array from the object");
35 };
36
37 assert_eq!(key, "array");
38
39 let r#true = array
41 .next()
42 .expect("failed to parse array")
43 .and_then(Any::literal)
44 .expect("failed to get a true value from the array")
45 .get()
46 .expect("failed to parse a true value");
47
48 assert_eq!(r#true, true);
49
50 let r#false = array
52 .next()
53 .expect("failed to parse array")
54 .and_then(Any::literal)
55 .expect("failed to get a false value from the array")
56 .get()
57 .expect("failed to parse a false value");
58
59 assert_eq!(r#false, false);
60
61 let null = array
63 .next()
64 .expect("failed to parse array")
65 .and_then(Any::literal)
66 .expect("failed to get a null value from the array")
67 .get()
68 .expect("failed to parse a null value");
69
70 assert_eq!(null, None);
71
72 let array_element = array.next().expect("failed to parse array");
74 assert!(array_element.is_none());
75
76 let element = root.next().expect("failed to parse object");
78 let Some((key, Any::Object(mut object))) = element else {
79 panic!("failed to get an object from the object");
80 };
81
82 assert_eq!(key, "object");
83
84 let object_element = object.next().expect("failed to parse inner object");
86 let Some((key, Any::Number(mut pi))) = object_element else {
87 panic!("failed to get a number from the inner object");
88 };
89 let pi = pi.get().expect("failed to parse a number");
90
91 assert_eq!(key, "pi");
92 assert_eq!(pi, 3.14);
93
94 let object_element = object.next().expect("failed to parse inner object");
96 let Some((key, Any::Number(mut exp))) = object_element else {
97 panic!("failed to get a number from the inner object");
98 };
99 let exp = exp.get().expect("failed to parse a number");
100
101 assert_eq!(key, "exp");
102 assert_eq!(exp.as_f32(), 1e5);
103
104 object.finish().expect("failed to parse inner object");
106
107 root.finish().expect("failed to parse object");
109
110 document.finish().expect("failed to parse document");
112}
113
114#[test]
116fn test() {
117 main();
118}