用途:帮助在 Rust 项目中为错误处理选择并应用正确的 crate。核心规则是 thiserror 面向调用方需要匹配和恢复的错误,anyhow 面向调用方只需展示的错误。库 crate 必须暴露结构化错误类型,二进制/应用层可用不透明错误。
主要能力:提供决策表(库用 thiserror、二进制用 anyhow、大应用内部模块各自用 thiserror、应用边界用 anyhow 收集并添加上下文);thiserror 的派生宏用法,包括 #[error]、#[from]、#[source]、#[error(transparent)] 等属性,以及 source 链的重要性;anyhow 的 Result、Error、context/with_context、bail!、ensure!、anyhow! 与 downcast_ref 恢复具体类型;两 crate 组合的标准布局;anyhow 与 thiserror 双向迁移步骤;eyre/color-eyre 作为 anyhow 家族替代方案;以及六类反模式。
使用方式:库中定义 #[derive(Error, Debug)] 枚举并返回 Result<T, 该枚举>,用 #[from] 让 ? 自动转换;应用层返回 anyhow::Result<T>,用 ? 加 .context(...) 逐层添加上下文,main 返回 Result<()>。需要分支时用 downcast_ref 取回具体类型。
适用场景:选择错误 crate、库公开错误类型设计、二进制错误胶水、source 链断裂修复、从 anyhow::Error 恢复具体类型、混合使用两 crate 的边界划分、迁移代码。
限制:资料未提供具体安装命令之外的平台或收费信息;版本为 thiserror 2.x、anyhow 1.x。反模式包括在库公开 API 暴露 anyhow::Error、为二进制顶层手写 thiserror 枚举、丢失 source 链、对 anyhow::Result 用 unwrap、派生 Error 时漏掉 Debug、用 map_err 转 String 吞掉上下文。