gitql_cli/printer/
csv_printer.rs1use std::io::stdout;
2use std::io::Write;
3
4use csv::Writer;
5use gitql_core::object::GitQLObject;
6
7use super::BaseOutputPrinter;
8
9pub struct CSVPrinter;
10
11impl BaseOutputPrinter for CSVPrinter {
12 fn print(&self, object: &mut GitQLObject) {
13 let mut writer = Writer::from_writer(vec![]);
14 let _ = writer.write_record(object.titles.clone());
15 let row_len = object.titles.len();
16 if let Some(group) = object.groups.first() {
17 for row in &group.rows {
18 let mut values_row: Vec<String> = Vec::with_capacity(row_len);
19 for value in &row.values {
20 values_row.push(value.literal());
21 }
22 let _ = writer.write_record(values_row);
23 }
24 }
25
26 if let Ok(writer_content) = writer.into_inner() {
27 if let Ok(content) = String::from_utf8(writer_content) {
28 if let Err(error) = writeln!(stdout(), "{content}") {
29 eprintln!("{error}");
30 std::process::exit(1);
31 }
32 }
33 }
34 }
35}