struct_audit/output/
json.rs1use 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}