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