3个稳定版本

1.0.2 2024年1月10日
1.0.1 2023年6月29日

#255Rust模式

Download history 511/week @ 2024-03-13 424/week @ 2024-03-20 296/week @ 2024-03-27 300/week @ 2024-04-03 207/week @ 2024-04-10 232/week @ 2024-04-17 218/week @ 2024-04-24 149/week @ 2024-05-01 200/week @ 2024-05-08 210/week @ 2024-05-15 333/week @ 2024-05-22 419/week @ 2024-05-29 407/week @ 2024-06-05 411/week @ 2024-06-12 393/week @ 2024-06-19 272/week @ 2024-06-26

1,549 每月下载量
4 crates 中使用

MIT/Apache

13KB
103

version-badge license-badge rust-version-badge

通过过程宏为Rust添加对"抛出函数"的支持。标记为throws的函数返回Result,但默认使用"Ok"路径,你不需要将ok返回值包装在Ok中。要抛出错误,请使用?throws宏。

Der Fehler的分支,更新依赖项并修复问题,同时(据我所知)boats无法为开源项目做出贡献。

#[throws]属性

throws属性修改一个函数或方法,使其返回一个Result。它接受一个可选的typename作为属性的参数,该typename将是此函数的错误类型;如果没有提供typename,则使用此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 {
        0
    } else {
        throw!();
    }
}

throw!

throw!是一个宏,它与Err($e)?模式等效。它接受一个错误类型并将其"抛出"。

《throw!》宏的一个重要方面是它允许你在标记为 throws 的函数内部返回错误。你不能仅仅从这些函数中 return 错误,你需要使用这个宏。

Rust 版本策略

此软件包仅支持 Rust 的当前稳定版本,补丁版本可以随时使用新功能。

许可证

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

供您选择。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,应按上述方式双许可,不附加任何额外的条款或条件。

依赖关系

~315–780KB
~19K SLoC