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 c: (&job::ValidColumnItemConfig, &job::ValidTableColumnsConfig),
21 s: (&job::ValidColumnDateConfig, &job::ValidColumnTimeConfig, &job::ValidColumnSizeConfig),
22 tab: &job::ValidResultMainTab, ) -> Vec<FormattedRow> {
24 let item_cfg = c.0;
25 let col_cfg = c.1;
26 let date_cfg = s.0;
27 let time_cfg = s.1;
28 let size_cfg = s.2;
29
30 let total_rows = tab.rows.len();
31 let num_width = total_rows.to_string().len();
32
33 let mut formatted_table = Vec::with_capacity(total_rows);
34
35 for (i, row) in tab.rows.iter().enumerate() {
36 let mut cells = Vec::with_capacity(col_cfg.columns.len());
38
39 for col in &col_cfg.columns {
40 let cell_str = match col {
41 job::ValidTableColumnsParse::Date => date_cfg.format_date(row.dt_modified),
42 job::ValidTableColumnsParse::Time => time_cfg.format_time(row.dt_modified),
43 job::ValidTableColumnsParse::Size => size_cfg.format_size(row.size_real),
44 job::ValidTableColumnsParse::Item => {
45 let u_params = (i, num_width, tab.tier_max, tab.name_len_max);
46 item_cfg.format_item(u_params, row, &tab.rows)
47 }
48 job::ValidTableColumnsParse::Path => {
49 let mut p_str = row.node.path.str.clone();
50
51 if item_cfg.align_end {
53 let padding = tab.path_len_max.saturating_sub(p_str.chars().count());
54 p_str.push_str(&" ".repeat(padding));
55 }
56 p_str
57 }
58 };
59 cells.push(cell_str);
60 }
61
62 if job::IS_DEBUG {
63 let type_node = match row.node.node {
64 logic::NodeIs::Dir => "📂",
65 logic::NodeIs::File => "📃",
66 };
67 cells.push(format!("🆔{}[{:?}] 🔙📂{:?}", type_node, row.node.id_self, row.node.id_path));
69 }
70
71 formatted_table.push(FormattedRow { raw: row.clone(), cells });
72 }
73
74 formatted_table
75}
76
77