Expand description
TableStream is a tool for streaming tables out to the terminal. It will buffer some number of rows before first output and try to automatically determine appropriate widths for each column.
// Some sample data we want to show:
struct City {
name: String,
country: String,
population: u32,
}
impl City {
fn new(name: &str, country: &str, population: u32) -> Self {
Self { name: name.to_string(), country: country.to_string(), population, }
}
}
fn largest_cities() -> Vec<City> {
vec![
City::new("Shanghai", "China", 24_150_000),
City::new("Beijing", "China", 21_700_000),
City::new("Lagos", "Nigeria", 21_320_000),
]
}
let mut out = io::stdout();
let mut stream = Stream::new(&mut out, vec![
// There are three different ways to specify which data to show in each column.
// 1. A closure that takes a formatter, and a reference to your type, and writes it out.
Column::new(|f, c: &City| write!(f, "{}", &c.name)).header("City"),
// 2. Or we can use a shortcut macro to just show a single field:
// (It must implement fmt::Display)
col!(City: .country).header("Country"),
// 3. You can optionally specify a formatter:
// (Note: don't use padding/alignment in your formatters. TableStream will do that for you.)
col!(City: "{:.2e}", .population).header("Population"),
]);
// Stream our data:
for city in largest_cities() {
stream.row(city)?;
}
stream.finish()?;
Macros§
- col
- Create a new column. Saves some boilerplate vs.
Column::new(...)
.