[](https://github.com/zhiburt/tabled/)
[](https://crates.io/crates/tabled)
[](https://docs.rs/tabled)
[](https://github.com/zhiburt/tabled/actions)
[](https://coveralls.io/github/zhiburt/tabled)
[](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};
use testing_table::assert_table;
#[derive(Tabled)]
struct Language<'a> {
name: &'a str,
designed_by: &'a str,
invented_year: usize,
}
let languages = vec![
Language { name: "C", designed_by: "Dennis Ritchie", invented_year: 1972 },
Language { name: "Go", designed_by: "Rob Pike", invented_year: 2009 },
Language { name: "Rust", designed_by: "Graydon Hoare", invented_year: 2010 },
Language { name: "Hare", designed_by: "Drew DeVault", invented_year: 2022 },
];
let table = Table::new(languages);
assert_table!(
table,
"+------+----------------+---------------+"
"| name | designed_by | invented_year |"
"+------+----------------+---------------+"
"| C | Dennis Ritchie | 1972 |"
"+------+----------------+---------------+"
"| Go | Rob Pike | 2009 |"
"+------+----------------+---------------+"
"| Rust | Graydon Hoare | 2010 |"
"+------+----------------+---------------+"
"| Hare | Drew DeVault | 2022 |"
"+------+----------------+---------------+"
);
```
The same example but we are building a table step by step.
```rust
use tabled::{builder::Builder, settings::Style};
use testing_table::assert_table;
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 mut table = builder.build();
table.with(Style::ascii_rounded());
assert_table!(
table,
".------------------------------."
"| C | Dennis Ritchie | 1972 |"
"| Go | Rob Pike | 2009 |"
"| Rust | Graydon Hoare | 2010 |"
"| Hare | Drew DeVault | 2022 |"
"'------------------------------'"
);
```