gitql_cli/printer/
csv_printer.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use csv::Writer;
use gitql_core::object::GitQLObject;

use super::base::OutputPrinter;

pub struct CSVPrinter;

impl OutputPrinter for CSVPrinter {
    fn print(&self, object: &mut GitQLObject) {
        let mut writer = Writer::from_writer(vec![]);
        let _ = writer.write_record(object.titles.clone());
        let row_len = object.titles.len();
        if let Some(group) = object.groups.first() {
            for row in &group.rows {
                let mut values_row: Vec<String> = Vec::with_capacity(row_len);
                for value in &row.values {
                    values_row.push(value.literal());
                }
                let _ = writer.write_record(values_row);
            }
        }

        if let Ok(writer_content) = writer.into_inner() {
            println!("{:?}", String::from_utf8(writer_content));
        }
    }
}