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 在 命令行界面
87,238 每月下载量
用于 78 个库 (71 个直接使用)
58KB
1K SLoC
cli-table
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
特征实现
要获取 TableStruct
的 Display
特征实现,请在结构体上使用 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 的函数可以修改表格/单元格的样式。它由 TableStruct
和 CellStruct
都实现。
对于单独格式化表格的每个单元格,可以使用 CellStruct
中的 justify
、align
和 padding
函数。
此外,还可以通过在 TableStruct
中调用 border
和 separator
函数来自定义表格的边框和分隔符。例如,要创建一个无边框的表格
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 License, Version 2.0 (LICENSE-APACHE)
- MIT 许可证 (LICENSE-MIT)
任选。
贡献
除非您明确声明,否则您根据Apache-2.0许可定义的任何有意提交以包含在作品中的贡献,应如上双重许可,不附加任何额外条款或条件。
依赖项
~1.6–9MB
~59K SLoC