#enums #conversion #macro #error-handling #convert #derive-debug #from-trait

enum_from_variant

A Rust 宏,用于生成 From 特质的实现,简化了枚举变体之间的错误转换和枚举映射

2 个版本

0.1.1 2024年6月18日
0.1.0 2024年6月18日

#1900 in 数据结构

MIT 许可证

11KB
144 代码行

enum-from-variant 库提供了 EnumFromVariant 宏,该宏简化了将一个枚举变体转换为另一个枚举变体的 From 特质的生成。这在处理错误转换或映射 Rust 代码中的不同枚举类型时尤其有用。

用法

以下是一个示例,其中我们使用 EnumFromVariant 宏在不同的枚举类型之间进行转换

use enum_from_variant::EnumFromVariant;
use derive_more::Display;

#[derive(Debug, EnumFromVariant)]
pub enum MainError {
    #[enum_from_variant("NetworkError")]
    Network(String),
    #[enum_from_variant("DatabaseError")]
    Database(DatabaseError),
}

#[derive(Debug, Display)]
pub enum NetworkError {
    Timeout(String),
}

#[derive(Debug, Display)]
pub enum DatabaseError {
    ConnectionFailed(String),
}

fn network_request() -> Result<(), MainError> {
    Err(NetworkError::Timeout("Network timeout".to_string()).into())
}

fn main() {
    match network_request() {
        Ok(_) => println!("Request succeeded"),
        Err(e) => println!("Error: {:?}", e),
    }
}

局限性

当前支持:该宏仅支持具有基本内部类型(如 String 和其他枚举)的枚举变体。不受支持的类型:目前不支持元组变体、结构体变体和更复杂的内部类型。

依赖项

~1.5MB
~36K SLoC