10个版本
使用旧的Rust 2015
0.1.8 | 2020年5月2日 |
---|---|
0.1.7 | 2020年3月5日 |
0.1.6 | 2019年10月11日 |
0.1.5 | 2019年1月2日 |
0.1.1 | 2017年11月28日 |
#21 在 #error-derive 中
每月341,309次下载
该包已失去人气
12KB
275 行
failure - 一个新的错误管理故事
注意: failure
已弃用。如果您喜欢 failure
的API,请考虑使用
failure
被设计用来简化Rust中的错误管理。它旨在用基于过去几年经验(包括从 quick-error 和 error-chain 获取的经验)的新系统来替换基于 std::error::Error
的错误管理。
failure
提供了两个核心组件
Fail
: 一个用于自定义错误类型的新的trait。Error
: 一个结构体,任何实现了Fail
的类型都可以转换为。
进化
Failure 目前作为一个库在发展。首先,Rust 本身正在进行工作以 修复错误trait,其次,Failure 面向 1.0 的原始计划不太可能以当前的形式实现。
因此,原1.0版本的master分支已删除,现在master代表0.1版本的后续迭代步骤,直到stdlib中的情况变得清晰。
原1.0分支可以在evolution/1.0中找到。
示例
extern crate serde;
extern crate toml;
#[macro_use] extern crate failure;
#[macro_use] extern crate serde_derive;
use std::collections::HashMap;
use std::path::PathBuf;
use std::str::FromStr;
use failure::Error;
// This is a new error type that you've created. It represents the ways a
// toolchain could be invalid.
//
// The custom derive for Fail derives an impl of both Fail and Display.
// We don't do any other magic like creating new types.
#[derive(Debug, Fail)]
enum ToolchainError {
#[fail(display = "invalid toolchain name: {}", name)]
InvalidToolchainName {
name: String,
},
#[fail(display = "unknown toolchain version: {}", version)]
UnknownToolchainVersion {
version: String,
}
}
pub struct ToolchainId {
// ... etc
}
impl FromStr for ToolchainId {
type Err = ToolchainError;
fn from_str(s: &str) -> Result<ToolchainId, ToolchainError> {
// ... etc
}
}
pub type Toolchains = HashMap<ToolchainId, PathBuf>;
// This opens a toml file containing associations between ToolchainIds and
// Paths (the roots of those toolchains).
//
// This could encounter an io Error, a toml parsing error, or a ToolchainError,
// all of them will be thrown into the special Error type
pub fn read_toolchains(path: PathBuf) -> Result<Toolchains, Error>
{
use std::fs::File;
use std::io::Read;
let mut string = String::new();
File::open(path)?.read_to_string(&mut string)?;
let toml: HashMap<String, PathBuf> = toml::from_str(&string)?;
let toolchains = toml.iter().map(|(key, path)| {
let toolchain_id = key.parse()?;
Ok((toolchain_id, path))
}).collect::<Result<Toolchains, ToolchainError>>()?;
Ok(toolchains)
}
需求
failure和failure_derive都旨在在所有高于1.31.0版本的稳定Rust版本、最新的beta版和最新的nightly版本上编译。如果任何一个crate在任何高于1.31.0的版本上编译失败,请提交一个问题。
failure与no_std兼容,尽管它的一些方面(主要是Error
类型)在no_std模式下将不可用。
许可证
failure根据MIT许可证或Apache许可证2.0条款许可,您可选择。
行为准则
failure crate的贡献是根据贡献者誓言组织的,failure的维护者@withoutboats承诺将介入以维护该行为准则。
依赖项
~1.5MB
~37K SLoC