tigers/structs/
row.rs

1use crate::{left_pad, max_length};
2
3#[derive(Debug, Clone)]
4pub struct Row {
5    headers: Vec<String>,
6    values: Vec<String>,
7}
8
9impl Row {
10    pub(crate) fn new(headers: Vec<String>, values: Vec<String>) -> Row {
11        Row { headers, values }
12    }
13
14    pub(crate) fn get_values(&self) -> &Vec<String> {
15        &self.values
16    }
17
18    pub(crate) fn rename(&self, new_headers: &[String]) -> Row {
19        Row {
20            headers: new_headers.to_owned(),
21            values: self.values.clone(),
22        }
23    }
24}
25
26impl std::ops::Index<usize> for Row {
27    type Output = String;
28
29    fn index(&self, index: usize) -> &Self::Output {
30        &self.values[index]
31    }
32}
33
34impl std::fmt::Display for Row {
35    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
36        let header_width = max_length!(self.headers);
37        let value_width = max_length!(self.values);
38        let w = 4;
39
40        for (i, header) in self.headers.iter().enumerate() {
41            write!(f, "{}", left_pad!(header, header_width))?;
42            write!(f, "{}", " ".repeat(w))?;
43            write!(f, "{}", left_pad!(&self.values[i], value_width))?;
44            if i < self.headers.len() - 1 {
45                writeln!(f)?;
46            }
47        }
48
49        Ok(())
50    }
51}