1 个不稳定版本

使用旧的 Rust 2015

0.1.2 2018年10月19日

#28#extern

MIT/Apache 许可证

62KB
1K SLoC

为嵌入式目标提供的 failure without backtrace 的分支

这是一个对 https://github.com/rust-lang-nursery/failure 的软分支,以去除 libbacktrace 以便兼容更不受欢迎的目标

failure - 新的错误管理故事

Build Status Latest Version docs

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 都旨在在 Rust 1.18.0 之后的所有稳定版本、最新的 beta 版本和最新的 nightly 版本上编译。如果任何 crate 在 1.18.0 之后版本上无法编译,请提交一个 issue。

failure 与 无 std 兼容,尽管它的一些方面(主要是 Error 类型)在无 std 模式下不可用。

许可证

failure 根据 MIT 许可证或 Apache 许可证 2.0 的条款进行许可,您可以选择。

行为准则

failure crate 的贡献根据贡献者公约进行组织,failure 的维护者 @withoutboats 承诺将介入维护该行为准则。

依赖关系

~0–0.8MB
~18K SLoC