gitql_cli/printer/
json_printer.rs

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