gitql-cli 0.43.0

GitQL Command line interface (CLI) components
Documentation
use std::io::stdout;
use std::io::Write;

use gitql_core::object::GitQLObject;

use super::BaseOutputPrinter;

pub struct JSONPrinter;

impl BaseOutputPrinter for JSONPrinter {
    fn print(&self, object: &mut GitQLObject) {
        let mut elements: Vec<serde_json::Value> = vec![];

        if let Some(group) = object.groups.first() {
            let titles = &object.titles;
            for row in &group.rows {
                let mut object = serde_json::Map::new();
                for (i, value) in row.values.iter().enumerate() {
                    object.insert(
                        titles[i].to_string(),
                        serde_json::Value::String(value.literal()),
                    );
                }
                elements.push(serde_json::Value::Object(object));
            }
        }

        if let Ok(json_str) = serde_json::to_string(&serde_json::Value::Array(elements)) {
            if let Err(error) = writeln!(stdout(), "{json_str}") {
                eprintln!("{error}");
                std::process::exit(1);
            }
        }
    }
}