use tabled::Tabled;
use xo65::Xo65;
use crate::query::Xo65Query as _;
pub fn dump(obj: &Xo65) {
println!("File:");
println!("{}", FmtFileTable { obj });
println!();
}
#[derive(Debug)]
struct FmtFileTable<'a, 'data> {
obj: &'a Xo65<'data>,
}
impl std::fmt::Display for FmtFileTable<'_, '_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
use tabled::{
settings::{object::Columns, Alignment, Style},
Table,
};
let rows = self.obj.file_table().iter().enumerate().map(|(idx, file)| {
let name = self.obj.fmt_string(file.name()).to_string();
let mtime = jiff::Timestamp::from_second(i64::from(file.mtime())).map_or_else(
|_| format!("{} (OUT OF RANGE)", file.mtime()),
|ts| ts.to_string(),
);
FmtFileTableRow {
idx,
name,
size: file.size(),
mtime,
}
});
Table::new(rows)
.with(Style::empty())
.modify(Columns::single(0), Alignment::right()) .modify(Columns::single(2), Alignment::right()) .fmt(f)
}
}
#[derive(Debug, Tabled)]
struct FmtFileTableRow {
idx: usize,
name: String,
size: u32,
mtime: String,
}