14 个版本

0.4.9 2024年7月2日
0.4.7 2022年4月13日
0.4.6 2021年4月29日
0.4.5 2021年3月5日
0.2.0 2019年10月20日

#19命令行界面

Download history 15541/week @ 2024-05-05 15683/week @ 2024-05-12 15196/week @ 2024-05-19 15524/week @ 2024-05-26 15270/week @ 2024-06-02 14709/week @ 2024-06-09 14373/week @ 2024-06-16 17225/week @ 2024-06-23 14886/week @ 2024-06-30 17276/week @ 2024-07-07 19037/week @ 2024-07-14 22083/week @ 2024-07-21 20821/week @ 2024-07-28 19897/week @ 2024-08-04 20569/week @ 2024-08-11 24326/week @ 2024-08-18

87,238 每月下载量
用于 78 个库 (71 个直接使用)

MIT/Apache

58KB
1K SLoC

cli-table

Continuous Integration Crates.io Documentation License

Rust 库,用于在命令行中打印表格。

用法

在您的 Cargo.toms 文件的 dependencies 部分添加 cli-table

[dependencies]
cli-table = "0.4"

简单用法

use cli_table::{format::Justify, print_stdout, Cell, Style, Table};

let table = vec![
    vec!["Tom".cell(), 10.cell().justify(Justify::Right)],
    vec!["Jerry".cell(), 15.cell().justify(Justify::Right)],
    vec!["Scooby Doo".cell(), 20.cell().justify(Justify::Right)],
]
.table()
.title(vec![
    "Name".cell().bold(true),
    "Age (in years)".cell().bold(true),
])
.bold(true);

assert!(print_stdout(table).is_ok());

以下是我们刚刚创建的表格的输出

+------------+----------------+
| Name       | Age (in years) |  <-- This row and all the borders/separators
+------------+----------------+      will appear in bold
| Tom        |             10 |
+------------+----------------+
| Jerry      |             15 |
+------------+----------------+
| Scooby Doo |             25 |
+------------+----------------+

Display 特征实现

要获取 TableStructDisplay 特征实现,请在结构体上使用 display() 函数以获取一个实现了 Display 特征的 TableDisplay 实例。

use cli_table::{format::Justify, Cell, Style, Table};

let table = vec![
    vec!["Tom".cell(), 10.cell().justify(Justify::Right)],
    vec!["Jerry".cell(), 15.cell().justify(Justify::Right)],
    vec!["Scooby Doo".cell(), 20.cell().justify(Justify::Right)],
]
.table()
.title(vec![
    "Name".cell().bold(true),
    "Age (in years)".cell().bold(true),
])
.bold(true);

let table_display = table.display().unwrap();

println!("{}", table_display);

以下是我们刚刚创建的表格的输出

+------------+----------------+
| Name       | Age (in years) |  <-- This row and all the borders/separators
+------------+----------------+      will appear in bold
| Tom        |             10 |
+------------+----------------+
| Jerry      |             15 |
+------------+----------------+
| Scooby Doo |             25 |
+------------+----------------+

派生宏

#[derive(Table)] 也可以用于将 Vec 或结构体切片打印为表格。

use cli_table::{format::Justify, print_stdout, Table, WithTitle};

#[derive(Table)]
struct User {
    #[table(title = "ID", justify = "Justify::Right")]
    id: u64,
    #[table(title = "First Name")]
    first_name: &'static str,
    #[table(title = "Last Name")]
    last_name: &'static str,
}

let users = vec![
    User {
        id: 1,
        first_name: "Scooby",
        last_name: "Doo",
    },
    User {
        id: 2,
        first_name: "John",
        last_name: "Cena",
    },
];

assert!(print_stdout(users.with_title()).is_ok());

以下是我们使用派生宏创建的表格的输出

+----+------------+-----------+
| ID | First Name | Last Name |  <-- This row will appear in bold
+----+------------+-----------+
|  1 | Scooby     | Doo       |
+----+------------+-----------+
|  2 | John       | Cena      |
+----+------------+-----------+

字段属性

  • title | name: 用于指定列标题。用法:#[table(title = "Title")]
  • justify:用于水平对齐列的内容。用法:#[table(justify = "Justify::Right")]
  • align:用于垂直对齐列的内容。用法:#[table(align = "Align::Top")]
  • color:用于指定列内容的颜色。用法:#[table(color = "Color::Red")]
  • bold:用于指定列内容的粗细。用法:#[table(bold)]
  • order:用于打印表格时对列进行排序。用法:#[table(order = <usize>)]。在这里,列将根据它们的顺序进行排序。例如,具有order = 0的列将显示在左侧,接着是具有order = 1的列,依此类推。
  • display_fn:用于打印未实现Display特征的类型。用法:#[table(display_fn = "<func_name>")]。提供的函数的签名应该是fn <func_name>(value: &<type>) -> impl Display
  • customize_fn:用于自定义单元格样式。用法:#[table(customize_fn = "<func_name>")]。提供的函数签名应为fn <func_name>, cell: CellStruct, value: &<type>) -> CellStruct。此属性可以在您想根据单元格内容更改格式/样式时使用。注意,这将覆盖其他属性所做的所有样式设置。
  • skip:用于跳过表中的一个字段。用法:#[table(skip)]

有关 derive 宏可用的配置的更多信息,请参阅 cli-table/examples/struct.rs

CSV

此crate还集成了 csv crate。在启用 "csv" 功能后,您可以使用 TryFrom<&mut Reader> for TableStruct trait 实现将 csv::Reader 转换为 TableStruct

有关处理 CSV 值的更多信息,请参阅 cli-table/examples/csv.rs

样式

通过调用 Style trait 的函数可以修改表格/单元格的样式。它由 TableStructCellStruct 都实现。

对于单独格式化表格的每个单元格,可以使用 CellStruct 中的 justifyalignpadding 函数。

此外,还可以通过在 TableStruct 中调用 borderseparator 函数来自定义表格的边框和分隔符。例如,要创建一个无边框的表格

use cli_table::{Cell, Table, TableStruct, format::{Justify, Border}, print_stdout};

fn get_table() -> TableStruct {
    vec![
        vec!["Tom".cell(), 10.cell().justify(Justify::Right)],
        vec!["Jerry".cell(), 15.cell().justify(Justify::Right)],
        vec!["Scooby Doo".cell(), 20.cell().justify(Justify::Right)],
    ]
    .table()
}

let table = get_table().border(Border::builder().build()); // Attaches an empty border to the table
assert!(print_stdout(table).is_ok());

功能

  • derive:启用 derive 宏以使用结构体创建表格。默认启用。
  • csv:启用使用 csv 打印表格的支持。默认启用。

许可

许可方式任选其一

任选。

贡献

除非您明确声明,否则您根据Apache-2.0许可定义的任何有意提交以包含在作品中的贡献,应如上双重许可,不附加任何额外条款或条件。

依赖项

~1.6–9MB
~59K SLoC