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