#error #hierarchy #macro #reuse #shorthand #proc-macro

error-tree

这个crate让我们可以使用error_tree!过程宏来方便地定义错误层次结构

3 个不稳定版本

0.3.6 2024年6月21日
0.3.5 2024年6月21日
0.1.0 2024年5月5日

20#shorthand

每月40次下载
用于 2 crate

MIT 许可证

47KB
891

错误树

概述

error_tree是一个Rust过程宏crate,旨在简化Rust应用程序中的错误处理。它允许您以干净和结构化的方式定义复杂的错误层次结构,使您的错误处理逻辑更加健壮且易于维护。

功能

  • 轻松定义嵌套错误枚举。
  • 自动生成错误转换的From实现。
  • 简化Rust中的复杂错误处理。

安装

error_tree添加到您的Cargo.toml文件中的[dependencies]

[dependencies]
error_tree = "0.1.0"

使用

以下是一个使用error_tree的基本示例

use error_tree::error_tree;

error_tree!{

    // Enumerate possible errors for capturing audio.
    pub enum PassiveAudioCaptureError {
        FormatError,
        DeviceError(DeviceError),
        IOError(IOError),
        WavError(WavError),
        HostError(HostError),
        StreamOrChannelError(StreamOrChannelError),
    }

    pub enum MonitorAllInputsError { 
        DeviceError(DeviceError),
    }

    pub enum StreamOrChannelError { 
        StreamError(StreamError),
        ChannelError(ChannelError),
    }

    pub enum IOError { 
        Basic(std::io::Error),
    }

    pub enum ChannelError { 
        ChannelRecvError(mpsc::RecvError),
    }

    pub enum StreamError { 
        StreamError(cpal::StreamError),
        PauseStreamError(cpal::PauseStreamError),
        BuildStreamError(cpal::BuildStreamError),
        PlayStreamError(cpal::PlayStreamError),
        SupportedStreamConfigsError(cpal::SupportedStreamConfigsError),
        DefaultStreamConfigError(cpal::DefaultStreamConfigError),
    }

    pub enum DeviceError { 
        DeviceNotAvailable {
            device_name: String,
        },

        Basic(cpal::DevicesError),
        NameError(cpal::DeviceNameError),
    }

    pub enum WavError { 
        Hound(hound::Error),
    }

    pub enum HostError { 
        HostUnavailable(cpal::HostUnavailable),
    }
}

这将自动生成您定义的层次结构内错误转换所需的必要From实现。

贡献

欢迎为error_tree做出贡献!请阅读我们的CONTRIBUTING.md以获取有关如何贡献的指南。

许可证

此crate根据MIT许可证分发。

依赖项

~4–6MB
~103K SLoC