summaryrefslogtreecommitdiffstats
path: root/vendor/tabled/examples/nested_table_3.rs
blob: 8e79b27a5e9836e13ac6245b0f1772f375502c34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//! This example demonstrates creating a nested [`Table`] by instantiating a new
//! [`Table`] from a collection of other [`Tables`](Table).
//!
//! * This third nested [`Table`] example showcases the [`Table::new()`] approach.

use tabled::{
    settings::{
        object::{Cell, Segment},
        Alignment, Border, Extract, Highlight, Modify, Panel, Style,
    },
    Table, Tabled,
};

#[derive(Tabled)]
struct Contribution {
    author: &'static str,
    profile: &'static str,
}

impl Contribution {
    fn new(author: &'static str, profile: &'static str) -> Self {
        Self { author, profile }
    }
}

fn main() {
    let committers = [
        Contribution::new("kozmod", "https:/github.com/kozmod"),
        Contribution::new("IsaacCloos", "https:/github.com/IsaacCloos"),
    ];

    let issuers = [Contribution::new(
        "aharpervc",
        "https:/github.com/aharpervc",
    )];

    let committers_table = Table::new(committers)
        .with(Panel::header("Contributors"))
        .with(Modify::new(Segment::all()).with(Alignment::center()))
        .to_string();

    let issues_table = Table::new(issuers)
        .with(Panel::header("Issuers"))
        .with(Modify::new(Segment::all()).with(Alignment::center()))
        .to_string();

    let mut a_welcome_table =
        Table::new([String::from("Thank You"), committers_table, issues_table]);
    a_welcome_table
        .with(Extract::rows(1..))
        .with(Style::ascii().remove_horizontal())
        .with(Modify::new(Segment::all()).with(Alignment::center()))
        .with(Highlight::new(Cell::new(0, 0), Border::filled('*')));

    println!("{a_welcome_table}");
}