Skip to main content

romm_cli/commands/
print.rs

1use crate::core::utils::truncate;
2use crate::types::{Platform, RomList};
3
4/// Print a simple table of platforms with aligned columns.
5pub fn print_platforms_table(platforms: &[Platform]) {
6    if platforms.is_empty() {
7        println!("No platforms returned.");
8        return;
9    }
10
11    let id_w = platforms
12        .iter()
13        .map(|p| p.id.to_string().len())
14        .max()
15        .unwrap_or(2)
16        .max(2);
17    let slug_w = platforms
18        .iter()
19        .map(|p| p.slug.len())
20        .max()
21        .unwrap_or(4)
22        .max(4);
23    let name_w = platforms
24        .iter()
25        .map(|p| {
26            p.display_name
27                .as_ref()
28                .filter(|s| !s.is_empty())
29                .unwrap_or(&p.name)
30                .len()
31        })
32        .max()
33        .unwrap_or(4)
34        .clamp(4, 40); // keep names from getting too wide
35
36    println!(
37        "{:>id_w$}  {:<slug_w$}  {:<name_w$}  {:>6}  {:>8}",
38        "ID",
39        "SLUG",
40        "NAME",
41        "ROMS",
42        "FIRMWARE",
43        id_w = id_w,
44        slug_w = slug_w,
45        name_w = name_w
46    );
47
48    for p in platforms {
49        let display_name = p
50            .display_name
51            .as_ref()
52            .filter(|s| !s.is_empty())
53            .unwrap_or(&p.name);
54        let name = truncate(display_name, name_w);
55        println!(
56            "{:>id_w$}  {:<slug_w$}  {:<name_w$}  {:>6}  {:>8}",
57            p.id,
58            p.slug,
59            name,
60            p.rom_count,
61            p.firmware.len(),
62            id_w = id_w,
63            slug_w = slug_w,
64            name_w = name_w
65        );
66    }
67}
68
69/// Print a simple table of ROMs for the `roms` command.
70pub fn print_roms_table(results: &RomList) {
71    if results.items.is_empty() {
72        println!("No ROMs returned.");
73        return;
74    }
75
76    let id_w = results
77        .items
78        .iter()
79        .map(|r| r.id.to_string().len())
80        .max()
81        .unwrap_or(2)
82        .max(2);
83    let pid_w = results
84        .items
85        .iter()
86        .map(|r| r.platform_id.to_string().len())
87        .max()
88        .unwrap_or(2)
89        .max(2);
90    let name_w = results
91        .items
92        .iter()
93        .map(|r| r.name.len())
94        .max()
95        .unwrap_or(4)
96        .clamp(4, 60);
97
98    println!(
99        "{:>id_w$}  {:>pid_w$}  {:<name_w$}",
100        "ID",
101        "PLAT",
102        "NAME",
103        id_w = id_w,
104        pid_w = pid_w,
105        name_w = name_w
106    );
107
108    for r in &results.items {
109        let name = truncate(&r.name, name_w);
110        println!(
111            "{:>id_w$}  {:>pid_w$}  {:<name_w$}",
112            r.id,
113            r.platform_id,
114            name,
115            id_w = id_w,
116            pid_w = pid_w,
117            name_w = name_w
118        );
119    }
120}