use sqlx::{Column, Row};
const COLUMN_WIDTH: usize = 15;
const RULE_WIDTH: usize = 50;
pub fn table<R>(rows: &[R], display: impl Fn(&R, &str) -> String) -> bool
where
R: Row,
{
let Some(first_row) = rows.first() else {
return false;
};
header(first_row);
for row in rows {
cells(row, &display);
}
true
}
fn header<R: Row>(row: &R) {
for (i, column) in row.columns().iter().enumerate() {
if i > 0 {
print!(" | ");
}
print!("{:<COLUMN_WIDTH$}", column.name());
}
println!();
println!("{:-<RULE_WIDTH$}", "");
}
fn cells<R: Row>(row: &R, display: impl Fn(&R, &str) -> String) {
for (i, column) in row.columns().iter().enumerate() {
if i > 0 {
print!(" | ");
}
print!("{:<COLUMN_WIDTH$}", display(row, column.name()));
}
println!();
}