blkar_lib/
json_macros.rs

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}