Skip to content

Commit be0785d

Browse files
author
Ivan King
committed
Resolved #6
- Added resulting table autoscaling to fix the display issues with fixed sizing - Added cargo feature to clap to fix missing author output of running CLI with `--help` and `--version` flags - Bumped version to 2.1.0
1 parent a28bf96 commit be0785d

3 files changed

Lines changed: 58 additions & 32 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
[package]
22
name = "rustroika"
3-
version = "2.0.0"
3+
version = "2.1.0"
44
edition = "2024"
55
license = "MIT or Apache-2.0"
66
description = "A utility to compare public transport costs"
7-
authors = ["Ivan King"]
7+
authors = ["Ivan 'oosama' King"]
88

99
[dependencies]
10-
clap = { version = "4.5.35", features = ["derive"] }
10+
clap = { version = "4.5.35", features = ["derive", "cargo"] }
1111
clap_derive = { version = "4.0.0-rc.1" }
1212
colored = "3.0.0"

src/main.rs

Lines changed: 54 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -27,34 +27,60 @@ fn main() {
2727
let individual_cost =
2828
full_price_count * args.ticket_price + discounted_count * (args.ticket_price / 2);
2929

30-
println!(
31-
"\n╭{}╴{}╴{}╴{}╴╮",
32-
"─".repeat(14),
33-
"─".repeat(10),
34-
"─".repeat(14),
35-
"─".repeat(17)
36-
);
37-
println!(
38-
"│ {:14} │ {:10} │ {:14} │ {:10} │",
39-
"Total trips".cyan().bold(),
40-
"Monthly".cyan().bold(),
41-
"Individual".cyan().bold(),
42-
"Ticket".cyan().bold()
43-
);
44-
println!(
45-
"│ {:14} │ {:>10} │ {:>14} │ {:>10} │",
46-
format!("{}", total_trips).yellow(),
47-
format!("{} RUB", args.monthly_cost).yellow(),
48-
format!("{} RUB", individual_cost).yellow(),
49-
format!("{} RUB", args.ticket_price).yellow()
50-
);
51-
println!(
52-
"╰{}╴{}╴{}╴{}╯",
53-
"─".repeat(14),
54-
"─".repeat(10),
55-
"─".repeat(14),
56-
"─".repeat(18)
57-
);
30+
let col1_data_plain = total_trips.to_string();
31+
let col2_data_plain = format!("{} RUB", args.monthly_cost);
32+
let col3_data_plain = format!("{} RUB", individual_cost);
33+
let col4_data_plain = format!("{} RUB", args.ticket_price);
34+
35+
let headers = ["Total Trips", "Monthly", "Individual", "Tciket"];
36+
let data = [
37+
&col1_data_plain,
38+
&col2_data_plain,
39+
&col3_data_plain,
40+
&col4_data_plain,
41+
];
42+
let col_widths: Vec<usize> = headers
43+
.iter()
44+
.zip(data.iter())
45+
.map(|(h, d)| h.len().max(d.len()))
46+
.collect();
47+
48+
let make_border = |left: &str, middle: &str, right: &str| {
49+
let mut parts = Vec::new();
50+
for &w in &col_widths {
51+
parts.push("─".repeat(w + 2));
52+
}
53+
format!("{}{}{}", left, parts.join(middle), right)
54+
};
55+
56+
let top_border = make_border("╭", "┬", "╮");
57+
let middle_border = make_border("├", "┼", "┤");
58+
let bottom_border = make_border("╰", "┴", "╯");
59+
60+
let header_row = headers
61+
.iter()
62+
.enumerate()
63+
.map(|(i, &h)| format!(" {:^width$} ", h.cyan().bold(), width = col_widths[i]))
64+
.collect::<Vec<_>>()
65+
.join("│");
66+
67+
let data_row = [
68+
col1_data_plain.yellow(),
69+
col2_data_plain.yellow(),
70+
col3_data_plain.yellow(),
71+
col4_data_plain.yellow(),
72+
]
73+
.iter()
74+
.enumerate()
75+
.map(|(i, cell)| format!(" {:^width$} ", cell, width = col_widths[i]))
76+
.collect::<Vec<_>>()
77+
.join("│");
78+
79+
println!("\n{}", top_border);
80+
println!("│{}│", header_row);
81+
println!("{}", middle_border);
82+
println!("│{}│", data_row);
83+
println!("{}", bottom_border);
5884

5985
let message = match individual_cost.cmp(&args.monthly_cost) {
6086
std::cmp::Ordering::Less => format!(

0 commit comments

Comments
 (0)