[github](https://github.com/zhiburt/tabled/) [crates.io](https://crates.io/crates/tabled) [docs.rs](https://docs.rs/tabled) [build status](https://github.com/zhiburt/tabled/actions) [coverage](https://coveralls.io/github/zhiburt/tabled) [dependency status](https://deps.rs/repo/github/zhiburt/tabled) # tabled 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`](https://github.com/zhiburt/tabled/blob/master/README.md). ## Usage 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`](https://docs.rs/tabled/latest/tabled/settings/index.html) module. ```rust 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. ```rust 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", "'------------------------------'" ) ); ```