An easy to use library for pretty printing tables of Rust struct
s and enum
s.
There are more examples and you can find in this README
.
To print a list of structs or enums as a table your types should implement the the Tabled
trait or derive it with a #[derive(Tabled)]
macro. Most of the default types implement the trait out of the box.
Most of a table configuration can be found in tabled::settings
module.
use tabled::{Table, Tabled}; #[derive(Tabled)] struct Language { name: String, designed_by: String, invented_year: usize, } impl Language { fn new(name: &str, designed_by: &str, invented_year: usize) -> Self { Self { name: name.to_string(), designed_by: designed_by.to_string(), invented_year, } } } let languages = vec![ Language::new("C", "Dennis Ritchie", 1972), Language::new("Go", "Rob Pike", 2009), Language::new("Rust", "Graydon Hoare", 2010), Language::new("Hare", "Drew DeVault", 2022), ]; let table = Table::new(languages).to_string(); assert_eq!( table, "+------+----------------+---------------+\n\ | name | designed_by | invented_year |\n\ +------+----------------+---------------+\n\ | C | Dennis Ritchie | 1972 |\n\ +------+----------------+---------------+\n\ | Go | Rob Pike | 2009 |\n\ +------+----------------+---------------+\n\ | Rust | Graydon Hoare | 2010 |\n\ +------+----------------+---------------+\n\ | Hare | Drew DeVault | 2022 |\n\ +------+----------------+---------------+" );
The same example but we are building a table step by step.
use tabled::{builder::Builder, settings::Style}; let mut builder = Builder::new(); builder.push_record(["C", "Dennis Ritchie", "1972"]); builder.push_record(["Go", "Rob Pike", "2009"]); builder.push_record(["Rust", "Graydon Hoare", "2010"]); builder.push_record(["Hare", "Drew DeVault", "2022"]); let table = builder.build() .with(Style::ascii_rounded()) .to_string(); assert_eq!( table, concat!( ".------------------------------.\n", "| C | Dennis Ritchie | 1972 |\n", "| Go | Rob Pike | 2009 |\n", "| Rust | Graydon Hoare | 2010 |\n", "| Hare | Drew DeVault | 2022 |\n", "'------------------------------'" ) );