14 个版本

使用旧的 Rust 2015

0.1.9 2015年12月10日
0.1.8 2015年12月10日
0.1.7 2015年4月17日
0.1.4 2015年3月26日
0.0.1 2014年11月22日

#2132Rust 模式

Download history 762/week @ 2024-01-11 620/week @ 2024-01-18 578/week @ 2024-01-25 402/week @ 2024-02-01 776/week @ 2024-02-08 990/week @ 2024-02-15 773/week @ 2024-02-22 657/week @ 2024-02-29 1052/week @ 2024-03-07 968/week @ 2024-03-14 848/week @ 2024-03-21 1017/week @ 2024-03-28 744/week @ 2024-04-04 928/week @ 2024-04-11 930/week @ 2024-04-18 779/week @ 2024-04-25

3,542 每月下载量
86 个crate(直接使用3个) 中使用

MIT 许可证

7KB
84

Error

适用于每个人的可扩展、类型安全的错误。

动机

Rust 需要一个可扩展的错误类型解决方案——这是其中一种尝试。

此crate提供Error trait,该trait定义了与错误交互的简单接口。

概述

Error 包含几个不可变的getter,仅是一个用于定义清晰、可互操作错误接口的壳。这个crate真正的魔法在于ErrorRefExt trait,它提供了用于检查Error trait对象是否是特定错误的isdowncast方法。

这些方法与在std::any::Any上找到的方法非常相似,这些方法允许运行时反射。当将这些方法应用于错误时,其好处是巨大的,因为它允许错误处理器通过Box<Error> trait对象接受一个泛型错误,然后尝试处理它们可以处理的错误类型,如果它们无法完全处理错误,则转发错误。

主要好处是它允许一个可扩展的错误系统,其中错误不仅可以轻松传播,还可以跨库边界进行处理

示例

#[deriving(Show, PartialEq)]
pub struct ParseError {
    location: uint,
}

impl Error for ParseError {
    fn name(&self) -> &'static str { "Parse Error" }
}

#[test] fn test_generic() {
    fn produce_parse_error() -> Box<Error> {
        box ParseError { location: 7u }
    }

    fn generic_handler(raw: Box<Error>) {
        let parse = raw.downcast::<ParseError>().unwrap();
        assert_eq!(*parse, ParseError { location: 7u });
    }

    generic_handler(produce_parse_error())
}

依赖关系

~8KB