1use crate::lib::{
2 job::{self, ValidResultMainRow},
3 logic,
4};
5#[derive(Debug, Clone)]
10pub struct FormattedRow {
11 pub raw: ValidResultMainRow, pub cells: Vec<String>, }
14
15pub fn engine_step2_data_formater(
20 j: &job::ValidPreparedJobConfig,
21 tab: &job::ValidResultMainTab, ) -> Vec<FormattedRow> {
23 let item_cfg = &j.item;
24 let col_cfg = &j.cols;
25 let date_cfg = &j.date;
26 let time_cfg = &j.time;
27 let size_cfg = &j.size;
28
29 let total_rows = tab.rows.len();
30 let num_width = total_rows.to_string().len();
31
32 let mut formatted_table = Vec::with_capacity(total_rows);
33
34 for (i, row) in tab.rows.iter().enumerate() {
35 let mut cells = Vec::with_capacity(col_cfg.columns.len());
37
38 for col in &col_cfg.columns {
39 let cell_str = match col {
40 job::ValidTableColumnsParse::Date => date_cfg.format_date(row.dt_modified),
41 job::ValidTableColumnsParse::Time => time_cfg.format_time(row.dt_modified),
42 job::ValidTableColumnsParse::Size => size_cfg.format_size(row.size_real),
43 job::ValidTableColumnsParse::Item => {
44 let u_params = (i, num_width, tab.tier_max, tab.name_len_max);
45 item_cfg.format_item(u_params, row, &tab.rows)
46 }
47 job::ValidTableColumnsParse::Path => {
48 let mut p_str = row.node.path.str.clone();
49
50 if item_cfg.align_end {
52 let padding = tab.path_len_max.saturating_sub(p_str.chars().count());
53 p_str.push_str(&" ".repeat(padding));
54 }
55 p_str
56 }
57 };
58 cells.push(cell_str);
59 }
60
61 if job::IS_DEBUG {
62 let type_node = match row.node.node {
63 logic::NodeIs::Dir => "📂",
64 logic::NodeIs::File => "📃",
65 };
66 cells.push(format!("🆔{}[{:?}] 🔙📂{:?}", type_node, row.node.id_self, row.node.id_path));
68 }
69
70 formatted_table.push(FormattedRow { raw: row.clone(), cells });
71 }
72
73 formatted_table
74}
75
76