1 #![allow(unused_macro_rules)]
2 
3 macro_rules! json_str {
4     ([]) => {
5         "[]"
6     };
7     ([ $e0:tt $(, $e:tt)* $(,)? ]) => {
8         concat!("[",
9             json_str!($e0),
10             $(",", json_str!($e),)*
11         "]")
12     };
13     ({}) => {
14         "{}"
15     };
16     ({ $k0:tt : $v0:tt $(, $k:tt : $v:tt)* $(,)? }) => {
17         concat!("{",
18             stringify!($k0), ":", json_str!($v0),
19             $(",", stringify!($k), ":", json_str!($v),)*
20         "}")
21     };
22     (($other:tt)) => {
23         $other
24     };
25     ($other:tt) => {
26         stringify!($other)
27     };
28 }
29 
30 macro_rules! pretty_str {
31     ($json:tt) => {
32         pretty_str_impl!("", $json)
33     };
34 }
35 
36 macro_rules! pretty_str_impl {
37     ($indent:expr, []) => {
38         "[]"
39     };
40     ($indent:expr, [ $e0:tt $(, $e:tt)* $(,)? ]) => {
41         concat!("[\n  ",
42             $indent, pretty_str_impl!(concat!("  ", $indent), $e0),
43             $(",\n  ", $indent, pretty_str_impl!(concat!("  ", $indent), $e),)*
44         "\n", $indent, "]")
45     };
46     ($indent:expr, {}) => {
47         "{}"
48     };
49     ($indent:expr, { $k0:tt : $v0:tt $(, $k:tt : $v:tt)* $(,)? }) => {
50         concat!("{\n  ",
51             $indent, stringify!($k0), ": ", pretty_str_impl!(concat!("  ", $indent), $v0),
52             $(",\n  ", $indent, stringify!($k), ": ", pretty_str_impl!(concat!("  ", $indent), $v),)*
53         "\n", $indent, "}")
54     };
55     ($indent:expr, ($other:tt)) => {
56         $other
57     };
58     ($indent:expr, $other:tt) => {
59         stringify!($other)
60     };
61 }
62