gitql_cli/printer/
yaml_printer.rs1use 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}