pub const MIN_COL_WIDTH: u16 = 4;
pub const PADDING: u16 = 2;
pub fn calculate_header_min_widths<S: AsRef<str>>(headers: &[S]) -> Vec<u16> {
headers
.iter()
.map(|h| (h.as_ref().chars().count() as u16 + PADDING).max(MIN_COL_WIDTH))
.collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn calculates_min_widths_with_str_slice() {
let headers = ["id", "name", "description"];
let widths = calculate_header_min_widths(&headers);
assert_eq!(widths, vec![4, 6, 13]);
}
#[test]
fn calculates_min_widths_with_string_vec() {
let headers = vec!["id".to_string(), "name".to_string()];
let widths = calculate_header_min_widths(&headers);
assert_eq!(widths, vec![4, 6]);
}
#[test]
fn enforces_min_width() {
let headers = ["a"];
let widths = calculate_header_min_widths(&headers);
assert_eq!(widths, vec![MIN_COL_WIDTH]);
}
}