fancy_table/
lib.rs

1use charset::{Charset, TableChars};
2
3pub mod ansi;
4pub mod charset;
5mod fancy;
6mod juststr;
7
8pub enum Layout {
9    Slim,
10    Fixed(usize),
11    Expandable(usize),
12}
13
14pub enum Overflow {
15    Wrap,
16    Truncate,
17}
18
19pub enum Align {
20    Center,
21    Left,
22    Right,
23}
24
25pub enum TitleAlign {
26    LeftOffset(usize),
27    RightOffset(usize),
28}
29
30pub enum Separator {
31    Single,
32    Double,
33    Custom(char),
34}
35
36pub struct FancyTableOpts {
37    pub title_align: TitleAlign,
38    pub charset: Charset,
39    pub headers_separator: Option<Separator>,
40    pub rows_separator: Option<Separator>,
41    pub max_lines: usize,
42}
43
44pub struct FancyTable<'a, T: AsRef<str>> {
45    width: usize,
46    chars: TableChars,
47    padding: usize,
48    columns: Vec<ColSpec>,
49    headers: Vec<T>,
50    rows_separator: Option<Separator>,
51    headers_separator: Option<Separator>,
52    title: Option<TitleSpec<'a>>,
53}
54
55pub struct FancyTableBuilder<'a, T: AsRef<str>> {
56    padding: usize,
57    max_lines: usize,
58    rows_separator: Option<Separator>,
59    headers_separator: Option<Separator>,
60    charset: Charset,
61    headers: Vec<T>,
62    columns: Vec<ColSpec>,
63    title: Option<&'a str>,
64    title_align: TitleAlign,
65}
66
67struct ColSpec {
68    width: usize,
69    max_lines: usize,
70    align: Align,
71    layout: Layout,
72    overflow: Overflow,
73}
74
75struct TitleSpec<'a> {
76    title: &'a str,
77    align: TitleAlign,
78}
79
80#[doc(hidden)]
81pub use juststr::JustedString;
82
83#[doc(hidden)]
84pub use juststr::Justify;