2 个版本 (1 个稳定版本)
1.0.0 | 2024年5月26日 |
---|---|
0.1.1 | 2024年4月4日 |
0.1.0 |
|
#568 在 过程宏
8KB
64 行
err-handler
是一个非侵入式错误处理宏,它增强了你的错误处理能力
如果你需要在外部处理错误或在单个位置合并它们,err-handler 是你的合理选择
[dependencies]
err-handler = "0.1.1"
示例
use thiserror::Error;
use err_handler::err_handler;
#[derive(Debug, Error)]
enum Err {
#[error("err1")]
Err1,
#[error("err2")]
Err2,
}
// The ` err-handler` marco attribute can be any function name but must have a matching return type.
#[err_handler(task_handler)]
fn task(_v: i32) -> Result<i32, Err> {
Err(Err::Err1)
}
fn task_handler(e: Err) -> Result<i32, Err> {
match e {
Err::Err1 => Ok(100),
_ => Err(e)
}
}
// If a target function is asynchronous, then its error handling function must also be asynchronous.
#[err_handler(crate::async_task_handler)]
async fn async_task(_v: i32) -> Result<i32, Err> {
Err(Err::Err1)
}
async fn async_task_handler(e: Err) -> Result<i32, Err> {
match e {
Err::Err1 => Ok(100),
_ => Err(e)
}
}
#[tokio::main]
async fn main() -> Result<(), Err> {
assert_eq!(task(0)?, 100);
assert_eq!(async_task(0).await?, 100);
Ok(())
}
依赖关系
~275–730KB
~17K SLoC