1use charset::{Charset, TableChars};
2
3mod 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 ansi::AnsiString;
82
83#[doc(hidden)]
84pub use juststr::JustedString;
85
86#[doc(hidden)]
87pub use juststr::Justify;