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    width: usize,
57    padding: usize,
58    max_lines: usize,
59    rows_separator: Option<Separator>,
60    headers_separator: Option<Separator>,
61    charset: Charset,
62    headers: Vec<T>,
63    columns: Vec<ColSpec>,
64    title: Option<&'a str>,
65    title_align: TitleAlign,
66}
67
68struct ColSpec {
69    width: usize,
70    max_lines: usize,
71    align: Align,
72    layout: Layout,
73    overflow: Overflow,
74}
75
76struct TitleSpec<'a> {
77    title: &'a str,
78    align: TitleAlign,
79}
80
81#[doc(hidden)]
82pub use juststr::JustedString;
83
84#[doc(hidden)]
85pub use juststr::Justify;