#traceback #macro #proc-macro #procedural #derive #traceback-error

traceback-derive

为与 traceback-error 库协同工作的过程宏

2 个版本

0.1.1 2023年9月11日
0.1.0 2023年9月11日

#2001开发工具

MIT/Apache

12KB
52 代码行

traceback-derive

traceback-derive 是一个过程宏库,旨在通过提供自定义宏来增强 traceback-error 库的功能,从而简化 Rust 中的错误处理和回溯。

用法

要在您的 Rust 项目中使用 traceback-derive,请按照以下步骤操作

  1. 在您的 Cargo.toml 中将 traceback-derivetraceback-error 添加为依赖项
[dependencies]
traceback-derive = "0.1.1"
traceback-error = "0.1.5"

#[traceback] 属性增强了函数的回溯功能,使其更容易处理错误并捕获详细的回溯信息。

  1. traceback 宏应用于您的函数,以创建和处理具有回溯的错误
#[traceback_derive::traceback]
fn my_function() -> Result<(), traceback_error::TracebackError> {
    // Your code here
    risky_function()?;
    // ...
}

traceback! 宏简化了错误创建并捕获相关上下文信息。

示例

以下是一个示例,说明 traceback-derive 如何简化错误处理,与直接使用 traceback-error 相比

没有 traceback-derive(直接使用 traceback-error

use traceback_error::{traceback, TracebackError};

fn main() {
    match caller_of_tasks() {
        Ok(_) => {}
        Err(e) => {
            traceback!(e, "One of the tasks failed");
        }
    }
}

fn task_that_may_fail() -> Result<(), TracebackError> {
    return Err(traceback!("task_that_may_fail failed"));
}

fn other_task_that_may_fail() -> Result<(), TracebackError> {
    return Err(traceback!("other_task_that_may_fail failed"));
}

fn caller_of_tasks() -> Result<(), TracebackError> {
    match task_that_may_fail() {
        Ok(_) => {}
        Err(e) => {
            return Err(traceback!(err e));
        }
    };
    match other_task_that_may_fail() {
        Ok(_) => {}
        Err(e) => {
            return Err(traceback!(err e));
        }
    };
    Ok(())
}

使用 traceback-derive

use traceback_error::{traceback, TracebackError};

fn main() {
    match caller_of_tasks() {
        Ok(_) => {}
        Err(e) => {
            traceback!(e, "One of the tasks failed");
        }
    }
}

fn task_that_may_fail() -> Result<(), TracebackError> {
    return Err(traceback!("task_that_may_fail failed"));
}

fn other_task_that_may_fail() -> Result<(), TracebackError> {
    return Err(traceback!("other_task_that_may_fail failed"));
}

#[traceback_derive::traceback]
fn caller_of_tasks() -> Result<(), TracebackError> {
    task_that_may_fail()?;
    other_task_that_may_fail()?;
    Ok(())
}

当展开时,这两个代码片段是等价的,但 traceback-derive 简化了错误处理和捕获。

贡献

欢迎贡献!请随意在 GitHub 仓库上打开问题或拉取请求。该项目仍处于非常初期的开发阶段,尚未建立适当的贡献指南。

许可证

此库根据 MIT 许可证Apache 许可证第 2 版 双重许可。您可以使用这两个许可证中的任何一个使用此库。请参阅 LICENSE-MITLICENSE-APACHE-2.0 文件,了解许可证的完整内容。

GitHub 仓库

有关更多信息以及为 traceback-derive 的开发做出贡献,请访问 GitHub 仓库

依赖项

~285–740KB
~18K SLoC