gitql_cli/printer/
yaml_printer.rs

1use gitql_core::object::GitQLObject;
2use linked_hash_map::LinkedHashMap;
3use yaml_rust::Yaml;
4use yaml_rust::YamlEmitter;
5
6use super::BaseOutputPrinter;
7
8pub struct YAMLPrinter;
9
10impl BaseOutputPrinter for YAMLPrinter {
11    fn print(&self, object: &mut GitQLObject) {
12        let mut out_str = String::new();
13        let mut emitter = YamlEmitter::new(&mut out_str);
14
15        let columns_titles = &object.titles;
16
17        let main_group = object.groups.first().unwrap();
18        let mut rows_rows: Vec<Yaml> = Vec::with_capacity(main_group.rows.len());
19
20        for row in main_group.rows.clone() {
21            let mut vec: LinkedHashMap<Yaml, Yaml> = LinkedHashMap::new();
22            for (column_index, column_value) in row.values.iter().enumerate() {
23                vec.insert(
24                    Yaml::String(columns_titles[column_index].to_string()),
25                    Yaml::String(column_value.to_string()),
26                );
27            }
28            let row_yaml = Yaml::Hash(vec);
29            rows_rows.push(row_yaml);
30        }
31
32        let _ = emitter.dump(&Yaml::Array(rows_rows));
33        println!("{}", out_str);
34    }
35}