1 个不稳定版本
0.1.0 | 2020年5月16日 |
---|
#1799 在 过程宏 中
10KB
166 行
FerrisExtensions
BoxedAsyncRecursion
此宏 #[boxed_async_recursion]
用于帮助使用 async/.await 进行递归调用
之前,为了使用 async/.await 编写递归,您应该使用以下技巧
fn recursive(k: u8, l: u32) -> BoxFuture<'static, u8> {
async move {
recursive(k, l).await;
recursive(k, l).await;
2u8
}.boxed()
}
使用此crate可以简化代码如下
#[boxed_async_recursion]
async fn recursive(k: u8, l: u32) -> u8 {
recursive(k, l).await;
recursive(k, l).await;
2u8
}
底层编译器宏仍然生成 BoxFuture 和 async move,但现在代码更容易理解
MultipleResultErrors
此宏 #[multiple_result_errors]
用于帮助处理函数的多个错误
示例
#[multiple_result_errors]
fn handle_file() -> Result<(), (IOError, IOError2)>
{
get_io_error()?;
Ok(())
}
fn main() {
let res = handle_file();
match res {
Ok(t) => {},
Err(err) => {
match err {
HandleFileResultErrors::IOError(err0) => {},
HandleFileResultErrors::IOError2(err1) => {},
};
}
};
}
在此示例中,使用宏 #[multiple_result_errors]
将生成匿名枚举 Handle22UrlResultErrors
,简化了多个错误的处理
依赖关系
~1.5MB
~38K SLoC