在 Rust 库中设计错误类型

主要观点:设计 Rust 中的错误类型需考虑诸多因素,包括库与二进制 crate 的区别、thiserror的使用及与#[from]结合、以std::io::Error为参考等,不同情况应选择不同设计方式。
关键信息:

  • 库中设计错误类型要考虑公共 API 及与其他错误类型的交互,有使用thiserror和自定义错误类型两种主要方式。
  • 使用thiserror#[from]易导致内部错误类型泄漏,可通过将内部错误类型装箱为特质对象或定义自己的包装类型来解决。
  • std::io::Error设计中,ErrorKind枚举表示不同错误种类,Custom结构体封装自定义错误类型,通过Boxed trait object处理内部错误类型。
    重要细节:
  • 对于二进制 crate,通常使用anyhoweyre处理错误,除非需在代码中匹配或记录错误方式不同才设计自定义错误类型。
  • std::io::Error为参考的设计中,Repr枚举用于表示错误的不同表示形式,ErrorKind枚举可添加新错误种类而不破坏现有代码,整个设计具有未来可扩展性。
  • 选择使用thiserror#[from]还是自定义错误类型取决于具体使用情况,可混合使用,若不想引入依赖可采用类似std::io::Error的自定义错误类型,但需更多手动实现工作。
阅读 8
0 条评论