| //! This example demonstrates using the [`Merge`] [`TableOption`] to clarify |
| //! redundancies in a [`Table`] display. |
| //! |
| //! * Note how a custom theme is applied to give the [`Merged`](Merge) cells |
| //! a unique look. |
| //! |
| //! * Merge supports both [`Merge::vertical()`] and [`Merge::horizontal()`]. |
| |
| use tabled::{ |
| settings::{ |
| object::{Cell, Columns, Object, Rows}, |
| style::{Border, BorderSpanCorrection, Style}, |
| Merge, Modify, |
| }, |
| Table, Tabled, |
| }; |
| |
| fn main() { |
| let data = [ |
| DatabaseTable::new("database_1", "database_1", "table_1", 10712), |
| DatabaseTable::new("database_1", "database_1", "table_2", 57), |
| DatabaseTable::new("database_1", "database_1", "table_3", 57), |
| DatabaseTable::new("database_2", "", "table_1", 72), |
| DatabaseTable::new("database_2", "", "table_2", 75), |
| DatabaseTable::new("database_3", "database_3", "table_1", 20), |
| DatabaseTable::new("database_3", "", "table_2", 21339), |
| DatabaseTable::new("database_3", "", "table_3", 141723), |
| ]; |
| |
| let mut table = Table::builder(data).index().transpose().build(); |
| config_theme(&mut table); |
| table.with(Merge::horizontal()).with(BorderSpanCorrection); |
| |
| println!("{table}"); |
| } |
| |
| #[derive(Tabled)] |
| struct DatabaseTable { |
| #[tabled(rename = "db")] |
| db_name: &'static str, |
| origin_db: &'static str, |
| #[tabled(rename = "table")] |
| table_name: &'static str, |
| total: usize, |
| } |
| |
| impl DatabaseTable { |
| fn new( |
| db_name: &'static str, |
| origin_db: &'static str, |
| table_name: &'static str, |
| total: usize, |
| ) -> Self { |
| Self { |
| db_name, |
| origin_db, |
| table_name, |
| total, |
| } |
| } |
| } |
| |
| fn config_theme(table: &mut Table) { |
| table |
| .with(Style::rounded().remove_vertical()) |
| .with(Modify::new(Columns::first()).with(Border::default().right('│'))) |
| .with( |
| Modify::new(Cell::new(0, 0)).with( |
| Border::default() |
| .corner_top_right('┬') |
| .corner_bottom_right('┼'), |
| ), |
| ) |
| .with( |
| Modify::new(Columns::first().intersect(Rows::last())) |
| .with(Border::default().corner_bottom_right('┴')), |
| ); |
| } |