4个版本 (1个稳定版)

1.0.0 2020年4月6日
1.0.0-alpha.22019年11月21日
1.0.0-alpha.12019年9月23日
0.1.0-alpha.02019年9月20日

#6 in #des

Download history 5705/week @ 2024-03-14 5316/week @ 2024-03-21 4462/week @ 2024-03-28 5841/week @ 2024-04-04 4611/week @ 2024-04-11 10228/week @ 2024-04-18 13882/week @ 2024-04-25 12367/week @ 2024-05-02 14216/week @ 2024-05-09 16393/week @ 2024-05-16 17301/week @ 2024-05-23 19444/week @ 2024-05-30 14443/week @ 2024-06-06 13797/week @ 2024-06-13 16608/week @ 2024-06-20 13946/week @ 2024-06-27

62,803 每月下载量
用于 fehler

MIT/Apache

10KB
217

错误

Documentation

错误是一个库,通过过程宏为Rust添加“抛出函数”支持。带有 throws 属性的函数返回 Result,但默认使用“Ok”路径,您不需要将ok返回值包裹在 Ok 中。要抛出错误,请使用 ?throws 宏。

错误提供以下项目

#[throws] 属性

throws属性修改一个函数或方法,使其返回一个 Result。它接受一个可选的类型名作为属性的参数,该类型名将作为此函数的错误类型;如果没有提供类型名,则使用此crate的默认错误类型。

在函数体内,return(包括隐式的最终返回)会自动“Ok包裹”。要引发错误,请使用 ?throws! 宏。

例如,这两个函数是等价的

#[throws(i32)]
fn foo(x: bool) -> i32 {
    if x {
        0
    } else {
        throw!(1);
    }
}

fn bar(x: bool) -> Result<i32, i32> {
    if x {
        Ok(0)
    } else {
        Err(1)
    }
}

在返回 Option 的函数中

可以使用该属性使用 as Option 语法来制作返回 Option 的函数,如下所示

// This function returns `Option<i32>`
#[throws(as Option)]
fn foo(x: bool) -> i32 {
    if x {
        return 0;
    } else {
        throw!();
    }
}

throw!

throw! 是一个宏,其作用等同于 Err($e)? 模式。它接受一个错误类型并将其“抛出”。

throw! 宏的一个重要方面是它允许你在标记为 throws 的函数中返回错误。你无法直接从这些函数中返回错误,你需要使用这个宏。

TODO

  • 让 throws 在闭包和异步块中工作(在稳定版本中不允许在表达式上使用属性)
  • 让 throws 在除 Result 和 Option 之外的其他 Try 类型上工作(TRy 不在稳定版本中)。

许可证

根据以下任一许可证授权

任选其一。

贡献

除非你明确声明,否则根据 Apache-2.0 许可证定义的,任何有意提交以包含在你工作的贡献,都将根据上述许可证双授权,不附加任何额外条款或条件。

依赖

~1.5MB
~36K SLoC