3 个不稳定版本

使用旧的 Rust 2015

0.2.0 2016 年 7 月 29 日
0.1.1 2016 年 7 月 29 日
0.1.0 2016 年 7 月 29 日

#8 in #custom-derive

MIT 许可证

9KB
149

error_derive

Build Status License

这个包允许通过 custom_derive! 自动导出 Error 实现。

许可证

许可协议为 MIT 许可证(见 LICENSEhttp://opensource.org/licenses/MIT)。


lib.rs:

这个包提供了一些用于导出 Error 枚举的有用方法和特质的宏。

所有这些宏都设计为与 custom_derive 包一起使用,尽管它们也可以独立使用。

示例

导出标准 Error 特质的实现。这还提供了必要的 Display 实现。

#[macro_use] extern crate custom_derive;
#[macro_use] extern crate error_derive;

custom_derive! {
#[derive(Debug,
ErrorFrom, ErrorDisplay, Error("very bad error"))]
pub enum Error {
Io(io::Error),
Utf8(Utf8Error),
}
}

let io_error = Error::Io(io::Error::last_os_error());
let utf8_error = Error::Utf8(from_utf8(&[0, 142]).unwrap_err());

assert_eq!("very bad error", io_error.description());
assert_eq!("very bad error", utf8_error.description());

assert!(io_error.cause().is_some());
assert!(utf8_error.cause().is_some());

概述

这个包允许导出以下特质

  • ErrorFrom,它从每个包含内部 Error 的枚举变体创建 From 特质实现
  • ErrorDisplay,它创建一个显示错误整个因果链的 Display 特质实现
  • Error,它使用给定的描述实现标准 Error 特质

ErrorErrorDisplay 通常一起导出,尽管当然可以单独实现。

不使用 custom_derive! 的使用

尽管设计为与 custom_derive! 一起使用,但这个包中的所有宏都可以不使用它来使用。以下

custom_derive! {
#[derive(Debug, ErrorDisplay, Error("just I/O error"))]
pub enum JustIoError { ThisOne(io::Error) }
}

也可以写成

#[derive(Debug)]
pub enum JustIoError { ThisOne(io::Error) }
ErrorDisplay! { () pub enum JustIoError { ThisOne(io::Error) } }
Error! { ("just I/O error") pub enum JustIoError { ThisOne(io::Error) } }

无运行时依赖