4 个版本 (1 个稳定版本)

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

#2888 in Rust模式

Download history 5693/week @ 2024-03-14 5300/week @ 2024-03-21 4461/week @ 2024-03-28 5838/week @ 2024-04-04 4621/week @ 2024-04-11 10241/week @ 2024-04-18 13883/week @ 2024-04-25 12367/week @ 2024-05-02 14206/week @ 2024-05-09 16403/week @ 2024-05-16 17327/week @ 2024-05-23 19459/week @ 2024-05-30 14470/week @ 2024-06-06 13778/week @ 2024-06-13 16603/week @ 2024-06-20 13932/week @ 2024-06-27

62,791 每月下载量
用于 109 个crate (80 直接)

MIT/Apache

11KB
92

错误

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的函数中

可以使用此属性将返回Option的函数转换为使用as 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的函数中返回错误。您不能直接从这些函数中返回错误,您需要使用此宏。

待办事项

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

许可证

根据以下任意一种许可证授权:

由您选择。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交并包含在作品中的任何贡献,都将按照上述方式双授权,没有任何附加条款或条件。

依赖项

约 1.5MB
约 35K SLoC