1 个不稳定版本
0.1.0 | 2021 年 3 月 4 日 |
---|
#2461 in Rust 模式
每月 49 次下载
在 2 crates 中使用
13KB
279 代码行
您是一个关注依赖关系的库作者,在手动实现所有错误处理模板代码和牺牲编译时间(syn、proc-macro2)使用 thiserror 之间犹豫不决吗?
不必再担心,因为 thiserror_lite 几乎可以无缝替换 thiserror,没有编译速度的影响,也没有任何依赖。thiserror_lite 在 dtolnay 的 thiserror crate 的基础上,通过使用 100% 声明式宏重新实现了大多数功能。
优势
- 编译时间更快
- 相同的语法 [稍后检查]
- 通过 thiserror 的完整测试套件,当 [考虑](INSERT LINK) 稍微的 [使用差异](INSERT LINK) 和 [错误信息差异](INSERT LINK) [稍后检查]
在此处插入演示从 thiserror 迁移到 thiserror_lite 的视频
此外,名称是否应更改为 thaterror 或其他名称?
注意事项
由于 Rust 的声明式宏系统(macro_rules!
)的限制,做出了一些权衡
格式字符串中访问变体字段的方式不同
thiserror 需要您使用点前缀字段名称
#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error("x^2 = {}", .x * .x)]
SomeNumber { x: i32 },
}
thiserror_lite 移除了点
#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error("x^2 = {}", x * x)]
SomeNumber { x: i32 },
}
如果您使用了此功能,则需要在将代码从 thiserror 迁移到 thiserror_lite 时相应地调整代码
没有 derive 宏
Rust 宏无法提供 #\[derive\]
功能。因此,thiserror_lite 使用包装宏替换了 thiserror 中的 #[derive(thiserror::Error)]
概念
thiserror_lite::err_enum! {
pub enum Error {
// ...
}
}
错误枚举中不支持泛型或生命周期
由于我在实现细节上遇到了难题,thiserror_lite 不支持在生成的枚举上使用泛型或生命周期 [稍后检查]
枚举元组变体中最多两个字段
不支持具有超过两个 [稍后检查] 字段的枚举元组变体