//! Builder module provides a [`Builder`] type which helps building //! a [`Table`] dynamically. //! //! It also contains [`IndexBuilder`] which can help to build a table with index. //! //! # Examples //! //! Here's an example of [`IndexBuilder`] usage //! #![cfg_attr(feature = "derive", doc = "```")] #![cfg_attr(not(feature = "derive"), doc = "```ignore")] //! use tabled::{Table, Tabled, settings::Style}; //! //! #[derive(Tabled)] //! struct Mission { //! name: &'static str, //! #[tabled(inline)] //! status: Status, //! } //! //! #[derive(Tabled)] //! enum Status { //! Complete, //! Started, //! Ready, //! Unknown, //! } //! //! let data = [ //! Mission { name: "Algebra", status: Status::Unknown }, //! Mission { name: "Apolo", status: Status::Complete }, //! ]; //! //! let mut builder = Table::builder(&data) //! .index() //! .column(0) //! .name(None) //! .transpose(); //! //! let mut table = builder.build(); //! table.with(Style::modern()); //! //! println!("{}", table); //! //! assert_eq!( //! table.to_string(), //! concat!( //! "┌──────────┬─────────┬───────┐\n", //! "│ │ Algebra │ Apolo │\n", //! "├──────────┼─────────┼───────┤\n", //! "│ Complete │ │ + │\n", //! "├──────────┼─────────┼───────┤\n", //! "│ Started │ │ │\n", //! "├──────────┼─────────┼───────┤\n", //! "│ Ready │ │ │\n", //! "├──────────┼─────────┼───────┤\n", //! "│ Unknown │ + │ │\n", //! "└──────────┴─────────┴───────┘", //! ), //! ) //! ``` //! //! Example when we don't want to show empty data of enum where not all variants are used. //! #![cfg_attr(feature = "derive", doc = "```")] #![cfg_attr(not(feature = "derive"), doc = "```ignore")] //! use tabled::{Table, Tabled, settings::Style}; //! //! #[derive(Tabled)] //! enum Status { //! #[tabled(inline)] //! Complete { //! started_timestamp: usize, //! finihsed_timestamp: usize, //! }, //! #[tabled(inline)] //! Started { //! timestamp: usize, //! }, //! Ready, //! Unknown, //! } //! //! let data = [ //! Status::Unknown, //! Status::Complete { started_timestamp: 123, finihsed_timestamp: 234 }, //! ]; //! //! let mut builder = Table::builder(&data); //! builder.clean(); //! //! let table = builder.build() //! .with(Style::modern()) //! .to_string(); //! //! println!("{}", table); //! //! assert_eq!( //! table, //! concat!( //! "┌───────────────────┬────────────────────┬─────────┐\n", //! "│ started_timestamp │ finihsed_timestamp │ Unknown │\n", //! "├───────────────────┼────────────────────┼─────────┤\n", //! "│ │ │ + │\n", //! "├───────────────────┼────────────────────┼─────────┤\n", //! "│ 123 │ 234 │ │\n", //! "└───────────────────┴────────────────────┴─────────┘", //! ), //! ) //! ``` //! //! [`Table`]: crate::Table mod index_builder; mod table_builder; pub use index_builder::IndexBuilder; pub use table_builder::Builder;