Skip to main content

no_std/
no_std.rs

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    // root
15    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    // "one"
22    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    // "array"
32    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    // "array" -> 0
40    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    // "array" -> 1
51    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    // "array" -> 2
62    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    // finish "array"
73    let array_element = array.next().expect("failed to parse array");
74    assert!(array_element.is_none());
75
76    // "object"
77    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    // "object" -> "pi"
85    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    // "object" -> "exp"
95    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    // skip the rest of "object"
105    object.finish().expect("failed to parse inner object");
106
107    // finish root
108    root.finish().expect("failed to parse object");
109
110    // finish document
111    document.finish().expect("failed to parse document");
112}
113
114// Test the example
115#[test]
116fn test() {
117    main();
118}