7 个版本 (4 个重大更改)
0.5.0 | 2019年11月28日 |
---|---|
0.4.0 | 2019年11月5日 |
0.3.1 | 2019年9月8日 |
0.2.0 | 2019年7月19日 |
0.1.1 | 2019年7月18日 |
#205 在 #description
每月下载量 27 次
14KB
74 行
Evitable
Evitable 是一个库,用于轻松创建和使用库中的自定义错误类型。它旨在使创建自定义领域特定错误类型更容易,同时减少将底层错误转换为领域特定错误相关的噪音,同时保持底层错误作为 source()
。此存储库默认启用一个名为 derive
的功能,该功能启用 derive ErrorContext。
快速示例
此示例展示了调用某些 API 的典型用例,该 API(假装)读取文件,然后失败,然后将错误转换为领域特定错误。
use evitable::*;
// Typically, this is in another file
mod error {
use super::*;
#[evitable]
pub enum ParseContext {
#[evitable(description = "Io error", from = std::io::Error)]
Io,
#[evitable(description("Invalid token. Expected {}, was {}.", expected, actual))]
InvalidToken {
expected: String,
actual: String,
},
}
}
use error::*;
// pretend token type
#[derive(Debug)]
pub enum Token {
EndOfFile,
}
fn read_file() -> Result<String, std::io::Error> {
// we're pretending to read a file here
Err(std::io::Error::from(std::io::ErrorKind::NotFound))
}
// main function
fn parse_file() -> ParseResult<Token> {
let content = read_file()?;
ensure!(content == "EOF", ParseContext::InvalidToken {
expected: "EOF".to_owned(),
actual: content,
});
Ok(Token::EndOfFile)
}
let result = parse_file();
let err = result.unwrap_err();
assert_eq!(err.kind(), ParseErrorKind::Io);
依赖关系
~2.5–4MB
~78K SLoC