1mod canonical;
4mod de;
5mod error;
6mod map;
7mod number;
8mod raw;
9mod raw_value;
10mod ser;
11pub mod value;
12mod value_de;
13
14pub use canonical::{CanonicalBytesScanner, CanonicalScanner};
15pub use de::{from_slice, from_str, Deserializer, Field, JsonCursor, Object};
16pub use error::{Error, Result};
17pub use map::Map;
18pub use number::Number;
19pub use raw::RawJson;
20pub use raw_value::{to_raw_value, RawValue};
21pub use ser::{
22 to_string, to_string_pretty, to_value, to_vec, to_vec_pretty, to_writer, Serializer,
23};
24pub use value::{from_value, Value, ValueIndex};
25
26#[doc(hidden)]
27#[macro_export]
28macro_rules! __json_array {
29 ($values:ident;) => {};
30 ($values:ident; null $(, $($rest:tt)*)?) => {
31 $values.push($crate::Value::Null);
32 $crate::__json_array!($values; $($($rest)*)?);
33 };
34 ($values:ident; [$($array:tt)*] $(, $($rest:tt)*)?) => {
35 $values.push($crate::json!([$($array)*]));
36 $crate::__json_array!($values; $($($rest)*)?);
37 };
38 ($values:ident; {$($object:tt)*} $(, $($rest:tt)*)?) => {
39 $values.push($crate::json!({$($object)*}));
40 $crate::__json_array!($values; $($($rest)*)?);
41 };
42 ($values:ident; $value:expr $(, $($rest:tt)*)?) => {
43 $values.push($crate::to_value(&$value).expect("JSON value serialization failed"));
44 $crate::__json_array!($values; $($($rest)*)?);
45 };
46}
47
48#[doc(hidden)]
49#[macro_export]
50macro_rules! __json_object {
51 ($object:ident;) => {};
52 ($object:ident; ($key:expr) : null $(, $($rest:tt)*)?) => {
53 $object.insert(($key).into(), $crate::Value::Null);
54 $crate::__json_object!($object; $($($rest)*)?);
55 };
56 ($object:ident; ($key:expr) : [$($array:tt)*] $(, $($rest:tt)*)?) => {
57 $object.insert(($key).into(), $crate::json!([$($array)*]));
58 $crate::__json_object!($object; $($($rest)*)?);
59 };
60 ($object:ident; ($key:expr) : {$($nested:tt)*} $(, $($rest:tt)*)?) => {
61 $object.insert(($key).into(), $crate::json!({$($nested)*}));
62 $crate::__json_object!($object; $($($rest)*)?);
63 };
64 ($object:ident; ($key:expr) : $value:expr $(, $($rest:tt)*)?) => {
65 $object.insert(
66 ($key).into(),
67 $crate::to_value(&$value).expect("JSON value serialization failed"),
68 );
69 $crate::__json_object!($object; $($($rest)*)?);
70 };
71 ($object:ident; $key:literal : null $(, $($rest:tt)*)?) => {
72 $object.insert(($key).into(), $crate::Value::Null);
73 $crate::__json_object!($object; $($($rest)*)?);
74 };
75 ($object:ident; $key:literal : [$($array:tt)*] $(, $($rest:tt)*)?) => {
76 $object.insert(($key).into(), $crate::json!([$($array)*]));
77 $crate::__json_object!($object; $($($rest)*)?);
78 };
79 ($object:ident; $key:literal : {$($nested:tt)*} $(, $($rest:tt)*)?) => {
80 $object.insert(($key).into(), $crate::json!({$($nested)*}));
81 $crate::__json_object!($object; $($($rest)*)?);
82 };
83 ($object:ident; $key:literal : $value:expr $(, $($rest:tt)*)?) => {
84 $object.insert(
85 ($key).into(),
86 $crate::to_value(&$value).expect("JSON value serialization failed"),
87 );
88 $crate::__json_object!($object; $($($rest)*)?);
89 };
90}
91
92#[macro_export]
94macro_rules! json {
95 (null) => {
96 $crate::Value::Null
97 };
98 ([$($tokens:tt)*]) => {{
99 let mut values = ::std::vec::Vec::new();
100 $crate::__json_array!(values; $($tokens)*);
101 $crate::Value::Array(values)
102 }};
103 ({$($tokens:tt)*}) => {{
104 let mut object = $crate::Map::new();
105 $crate::__json_object!(object; $($tokens)*);
106 $crate::Value::Object(object)
107 }};
108 ($value:expr) => {
109 $crate::to_value(&$value).expect("JSON value serialization failed")
110 };
111}