gitql_cli/printer/
json_printer.rs

1use std::io::stdout;
2use std::io::Write;
3
4use gitql_core::object::GitQLObject;
5
6use super::BaseOutputPrinter;
7
8pub struct JSONPrinter;
9
10impl BaseOutputPrinter for JSONPrinter {
11    fn print(&self, object: &mut GitQLObject) {
12        let mut elements: Vec<serde_json::Value> = vec![];
13
14        if let Some(group) = object.groups.first() {
15            let titles = &object.titles;
16            for row in &group.rows {
17                let mut object = serde_json::Map::new();
18                for (i, value) in row.values.iter().enumerate() {
19                    object.insert(
20                        titles[i].to_string(),
21                        serde_json::Value::String(value.literal()),
22                    );
23                }
24                elements.push(serde_json::Value::Object(object));
25            }
26        }
27
28        if let Ok(json_str) = serde_json::to_string(&serde_json::Value::Array(elements)) {
29            if let Err(error) = writeln!(stdout(), "{}", json_str) {
30                eprintln!("{}", error);
31                std::process::exit(1);
32            }
33        }
34    }
35}