blkar_lib/
json_macros.rs

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}