1macro_rules! skip_quote_for_term {
2 (
3 $val:expr
4 ) => {{
5 $val == "null"
6 || $val == "true"
7 || $val == "false"
8 }}
9}
10
11macro_rules! write_json_field {
12 (
13 $f:expr, $key:expr, $val:expr, $skip_quotes:expr, $no_comma:expr
14 ) => {{
15 use misc_utils::escape_quotes;
16
17 if !$no_comma {
18 write!($f, ",")?;
19 }
20
21 if $skip_quotes || skip_quote_for_term!($val) {
22 writeln!($f, "\"{}\": {}", to_camelcase($key), escape_quotes(&$val))
23 } else {
24 writeln!($f, "\"{}\": \"{}\"", to_camelcase($key), escape_quotes(&$val))
25 }
26 }};
27}
28
29macro_rules! print_json_field {
30 (
31 $output_channel:expr => $key:expr, $val:expr, $skip_quotes:expr, $no_comma:expr
32 ) => {{
33 use misc_utils::{escape_quotes,
34 to_camelcase};
35
36 if !$no_comma {
37 print_at_output_channel!($output_channel => ",");
38 }
39
40 if $skip_quotes || skip_quote_for_term!($val) {
41 println_at_output_channel!($output_channel => "\"{}\": {}", to_camelcase($key), escape_quotes(&$val));
42 } else {
43 println_at_output_channel!($output_channel => "\"{}\": \"{}\"", to_camelcase($key), escape_quotes(&$val));
44 }
45 }};
46}
47
48#[macro_export]
49macro_rules! print_field_if_json {
50 (
51 $json_printer:expr, $($t:tt)*
52 ) => {{
53 if $json_printer.json_enabled() {
54 print_maybe_json!($json_printer, $($t)*);
55 }
56 }}
57}
58
59#[macro_export]
60macro_rules! print_maybe_json {
61 (
62 $json_printer:expr, $($val:expr),* => skip_quotes
63 ) => {{
64 print_maybe_json!($json_printer, $($val),* => true)
65 }};
66 (
67 $json_printer:expr, $($val:expr),*
68 ) => {{
69 print_maybe_json!($json_printer, $($val),* => false)
70 }};
71 (
72 $json_printer:expr, $($val:expr),* => $skip_quotes:expr
73 ) => {{
74 let msg = format!($($val),*);
75
76 $json_printer.print_maybe_json($skip_quotes, &msg);
77 }}
78}
79
80macro_rules! write_maybe_json {
81 (
82 $f:expr, $json_printer:expr, $($val:expr),* => skip_quotes
83 ) => {{
84 write_maybe_json!($f, $json_printer, $($val),* => true)
85 }};
86 (
87 $f:expr, $json_printer:expr, $($val:expr),*
88 ) => {{
89 write_maybe_json!($f, $json_printer, $($val),* => false)
90 }};
91 (
92 $f:expr, $json_printer:expr, $($val:expr),* => $skip_quotes:expr
93 ) => {{
94 let msg = format!($($val),*);
95
96 $json_printer.write_maybe_json($f, $skip_quotes, &msg)
97 }}
98}
99
100macro_rules! null_if_json_else {
101 (
102 $json_printer:expr, $val:expr
103 ) => {{
104 if $json_printer.json_enabled() {
105 "null"
106 } else {
107 $val
108 }
109 }}
110}