struct_audit/output/
json.rs

1use crate::types::StructLayout;
2use serde::Serialize;
3
4#[derive(Serialize)]
5struct Output<'a> {
6    version: &'static str,
7    structs: &'a [StructLayout],
8}
9
10pub struct JsonFormatter {
11    pretty: bool,
12}
13
14impl JsonFormatter {
15    pub fn new(pretty: bool) -> Self {
16        Self { pretty }
17    }
18
19    pub fn format(&self, layouts: &[StructLayout]) -> String {
20        let output = Output { version: env!("CARGO_PKG_VERSION"), structs: layouts };
21
22        if self.pretty {
23            serde_json::to_string_pretty(&output)
24                .unwrap_or_else(|e| format!("{{\"error\": \"{}\"}}", e))
25        } else {
26            serde_json::to_string(&output).unwrap_or_else(|e| format!("{{\"error\": \"{}\"}}", e))
27        }
28    }
29}