1fn calculate_padding(max: usize, current: usize, x_padding: Option<u8>) -> (usize, usize) {
2 let total = max - current;
3 let extra = x_padding.unwrap_or(0) as usize;
4 (total / 2 + extra, total / 2)
5}
6
7pub fn center(text: &[&str], x_padding: Option<u8>) -> String {
8 let longest = text.iter().max_by_key(|s| s.len()).map_or(0, |s| s.len());
9
10 text.iter().map(|s| {
11 let (left_pad, right_pad) = calculate_padding(longest, s.len(), x_padding);
12 format!("{}{}{}", " ".repeat(left_pad), s, " ".repeat(right_pad))
13 }).collect::<Vec<_>>().join("\n")
14}
15
16pub fn print_center(text: &[&str], x_padding: Option<u8>) {
17 println!("{}", center(text, x_padding));
18}
19
20pub fn right(text: &[&str], x_padding: Option<u8>) -> String {
21 let longest = text.iter().max_by_key(|s| s.len()).map_or(0, |s| s.len());
22
23 text.iter().map(|s| {
24 let (left_pad, _) = calculate_padding(longest, s.len(), x_padding);
25
26 format!("{}{}", " ".repeat(left_pad), s)
27 }).collect::<Vec<_>>().join("\n")
28}
29
30pub fn print_right(text: &[&str], x_padding: Option<u8>) {
31 println!("{}", right(text, x_padding));
32}