5 个版本 (3 个破坏性更新)

新版本 0.4.0 2024 年 8 月 5 日
0.3.0 2023 年 12 月 20 日
0.2.1 2023 年 6 月 2 日
0.2.0 2023 年 4 月 23 日
0.1.0 2023 年 4 月 11 日

文本处理 中排名第 1850

每月下载量 48

MIT 许可证

1MB
17K SLoC

(static_table) 在编译时制作表格

该库提供宏来在编译时构建美观的表格。

您可以构建两种类型的表格。

  1. 标准调整表格 (static_table::static_table)。
  2. 未调整的,浮动表格 (static_table::pool_table)。

有关您可以使用宏的更多功能和设置,请参阅文档 (docs.rs)。

开始使用

将库添加到您的 Cargo.toml

# Cargo.toml
[dependencies]
static_table = "0.2"

static_table 使用的示例。

示例 结果
use static_table::static_table;

static LANG_LIST: &str = static_table!([
    ["name", "designed by", "first release"],
    ["C", "Dennis Ritchie", "1972"],
    ["Go", "Rob Pike", "2009"],
    ["Rust", "Graydon Hoare", "2010"],
    ["Hare", "Drew DeVault", "2022"],
]);

fn main() {
    println!("{LANG_LIST}")
}
+------+----------------+---------------+
| name | designed by    | first release |
+------+----------------+---------------+
| C    | Dennis Ritchie | 1972          |
+------+----------------+---------------+
| Go   | Rob Pike       | 2009          |
+------+----------------+---------------+
| Rust | Graydon Hoare  | 2010          |
+------+----------------+---------------+
| Hare | Drew DeVault   | 2022          |
+------+----------------+---------------+

pool_table 使用的示例。

示例 结果
use static_table::pool_table;

static LANG_LIST: &str = pool_table!([
    ["name", "designed by", "first release"],
    ["C", "Dennis Ritchie", "1972"],
    ["Go", "Rob Pike", "2009"],
    ["Rust", "Graydon Hoare", "2010"],
    ["Hare", "Drew DeVault", "2022"],
]);

fn main() {
    println!("{LANG_LIST}")
}
+------+-------------+---------------+
| name | designed by | first release |
+------+-------------+-----+---------+
| C    | Dennis Ritchie    | 1972    |
+------+--+---------------++---------+
| Go      | Rob Pike      | 2009     |
+---------+---------------+-+--------+
| Rust    | Graydon Hoare   | 2010   |
+---------+-----------------+--------+
| Hare    | Drew DeVault    | 2022   |
+---------+-----------------+--------+

您甚至可以在文档中使用宏

/// Add joins 2 integers together to get a sum.
/// 
/// ```
#[doc = static_table::static_table!([
    ["a", "b", "result"],
    ["1", '2', '3'],
    ["2", '2', '4']
])]
/// ```
pub fn add(left: usize, right: usize) -> usize {
    left + right
}

二进制大小关注点

这是您应该注意的事情。使用 static_table 可能在二进制大小上增加,因为表格将作为实际符号存储在二进制文件的静态部分(ELF、PE 等)。

我在这方面进行了一些测试。使用 static_table 的二进制文件比使用 lazy_static/once_cell 在运行时构建表格的二进制文件小得多。但我不确定为什么会出现这种情况。

                debug mode      release mode
static_table    13497232        4501576
runtime table   12031120        4156024

依赖关系

~2.5MB
~49K SLoC