#![allow(unused_macro_rules)] macro_rules! json_str { ([]) => { "[]" }; ([ $e0:tt $(, $e:tt)* $(,)? ]) => { concat!("[", json_str!($e0), $(",", json_str!($e),)* "]") }; ({}) => { "{}" }; ({ $k0:tt : $v0:tt $(, $k:tt : $v:tt)* $(,)? }) => { concat!("{", stringify!($k0), ":", json_str!($v0), $(",", stringify!($k), ":", json_str!($v),)* "}") }; (($other:tt)) => { $other }; ($other:tt) => { stringify!($other) }; } macro_rules! pretty_str { ($json:tt) => { pretty_str_impl!("", $json) }; } macro_rules! pretty_str_impl { ($indent:expr, []) => { "[]" }; ($indent:expr, [ $e0:tt $(, $e:tt)* $(,)? ]) => { concat!("[\n ", $indent, pretty_str_impl!(concat!(" ", $indent), $e0), $(",\n ", $indent, pretty_str_impl!(concat!(" ", $indent), $e),)* "\n", $indent, "]") }; ($indent:expr, {}) => { "{}" }; ($indent:expr, { $k0:tt : $v0:tt $(, $k:tt : $v:tt)* $(,)? }) => { concat!("{\n ", $indent, stringify!($k0), ": ", pretty_str_impl!(concat!(" ", $indent), $v0), $(",\n ", $indent, stringify!($k), ": ", pretty_str_impl!(concat!(" ", $indent), $v),)* "\n", $indent, "}") }; ($indent:expr, ($other:tt)) => { $other }; ($indent:expr, $other:tt) => { stringify!($other) }; }