use tabled::Tabled;
use xo65::Xo65;
use crate::query::Xo65Query as _;
pub fn dump(obj: &Xo65) {
println!("Import:");
println!("{}", FmtImportTable { obj });
println!();
}
#[derive(Debug)]
struct FmtImportTable<'a, 'data> {
obj: &'a Xo65<'data>,
}
impl std::fmt::Display for FmtImportTable<'_, '_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
use tabled::{
settings::{object::Columns, Alignment, Style},
Table,
};
let rows = self
.obj
.import_table()
.iter()
.enumerate()
.map(|(idx, import)| {
let name = self.obj.fmt_string(import.name()).to_string();
let def_lines = import.def_lines().len();
let ref_lines = import.ref_lines().len();
FmtImportTableRow {
idx,
name,
addr_size: import.addr_size(),
def_lines,
ref_lines,
}
});
Table::new(rows)
.with(Style::empty())
.modify(Columns::single(0), Alignment::right()) .modify(Columns::single(2), Alignment::right()) .modify(Columns::single(3), Alignment::right()) .modify(Columns::single(4), Alignment::right()) .fmt(f)
}
}
#[derive(Debug, Tabled)]
struct FmtImportTableRow {
idx: usize,
name: String,
addr_size: u8,
def_lines: usize,
ref_lines: usize,
}