tabled/builder/mod.rs
1//! Builder module provides a [`Builder`] type which helps building
2//! a [`Table`] dynamically.
3//!
4//! It also contains [`IndexBuilder`] which can help to build a table with index.
5//!
6//! # Examples
7//!
8//! Here's an example of [`IndexBuilder`] usage
9//!
10#![cfg_attr(feature = "derive", doc = "```")]
11#![cfg_attr(not(feature = "derive"), doc = "```ignore")]
12//! use tabled::{Table, Tabled, settings::Style};
13//!
14//! #[derive(Tabled)]
15//! struct Mission {
16//! name: &'static str,
17//! #[tabled(inline)]
18//! status: Status,
19//! }
20//!
21//! #[derive(Tabled)]
22//! enum Status {
23//! Complete,
24//! Started,
25//! Ready,
26//! Unknown,
27//! }
28//!
29//! let data = [
30//! Mission { name: "Algebra", status: Status::Unknown },
31//! Mission { name: "Apolo", status: Status::Complete },
32//! ];
33//!
34//! let mut builder = Table::builder(&data)
35//! .index()
36//! .column(0)
37//! .name(None)
38//! .transpose();
39//!
40//! let mut table = builder.build();
41//! table.with(Style::modern());
42//!
43//! println!("{}", table);
44//!
45//! assert_eq!(
46//! table.to_string(),
47//! concat!(
48//! "┌──────────┬─────────┬───────┐\n",
49//! "│ │ Algebra │ Apolo │\n",
50//! "├──────────┼─────────┼───────┤\n",
51//! "│ Complete │ │ + │\n",
52//! "├──────────┼─────────┼───────┤\n",
53//! "│ Started │ │ │\n",
54//! "├──────────┼─────────┼───────┤\n",
55//! "│ Ready │ │ │\n",
56//! "├──────────┼─────────┼───────┤\n",
57//! "│ Unknown │ + │ │\n",
58//! "└──────────┴─────────┴───────┘",
59//! ),
60//! )
61//! ```
62//!
63//! Example when we don't want to show empty data of enum where not all variants are used.
64//!
65#![cfg_attr(feature = "derive", doc = "```")]
66#![cfg_attr(not(feature = "derive"), doc = "```ignore")]
67//! use tabled::{Table, Tabled, settings::Style};
68//!
69//! #[derive(Tabled)]
70//! enum Status {
71//! #[tabled(inline)]
72//! Complete {
73//! started_timestamp: usize,
74//! finihsed_timestamp: usize,
75//! },
76//! #[tabled(inline)]
77//! Started {
78//! timestamp: usize,
79//! },
80//! Ready,
81//! Unknown,
82//! }
83//!
84//! let data = [
85//! Status::Unknown,
86//! Status::Complete { started_timestamp: 123, finihsed_timestamp: 234 },
87//! ];
88//!
89//! let table = Table::new(data)
90//! .with(Style::modern())
91//! .to_string();
92//!
93//! println!("{}", table);
94//!
95//! assert_eq!(
96//! table,
97//! concat!(
98//! "┌───────────────────┬────────────────────┬───────────┬───────┬─────────┐\n",
99//! "│ started_timestamp │ finihsed_timestamp │ timestamp │ Ready │ Unknown │\n",
100//! "├───────────────────┼────────────────────┼───────────┼───────┼─────────┤\n",
101//! "│ │ │ │ │ + │\n",
102//! "├───────────────────┼────────────────────┼───────────┼───────┼─────────┤\n",
103//! "│ 123 │ 234 │ │ │ │\n",
104//! "└───────────────────┴────────────────────┴───────────┴───────┴─────────┘",
105//! ),
106//! )
107//! ```
108//!
109//! [`Table`]: crate::Table
110
111mod index_builder;
112mod table_builder;
113
114pub use index_builder::IndexBuilder;
115pub use table_builder::Builder;