#枚举 #自动 #反向 #try-from #转换 #生成 #变体

convert-enum

自动为枚举生成From和反向TryFrom实现

1个不稳定版本

0.1.0 2022年7月2日

#18#try-from

Download history 134/week @ 2024-03-13 273/week @ 2024-03-20 286/week @ 2024-03-27 129/week @ 2024-04-03 117/week @ 2024-04-10 230/week @ 2024-04-17 335/week @ 2024-04-24 391/week @ 2024-05-01 273/week @ 2024-05-08 246/week @ 2024-05-15 325/week @ 2024-05-22 249/week @ 2024-05-29 283/week @ 2024-06-05 209/week @ 2024-06-12 213/week @ 2024-06-19 267/week @ 2024-06-26

985 每月下载量
用于 17 个crates(通过 atm0s-sdn-network

Apache-2.0 OR MIT

8KB
87

此crate允许自动在合适的枚举上实现From和反向TryFrom

在你有一个封装了多种不同类型的枚举,并且你希望为每种类型都实现一个From或反向TryFrom实现的情况下(例如,这在错误处理中很常见,当你想封装来自不同库的错误时),手动实现可能会相当繁琐。

使用此crate提供的FromTryInto派生宏,这项工作可以自动化。

示例

定义一个Error类型,它可以从std::fmt::Errorstd::io::Error转换(为了方便使用问号运算符),并且还提供了一个包含自定义消息的变体,该变体不应自动转换

#[derive(convert_enum::From)]
enum Error {
    #[convert_enum(optout)]
    Custom(Cow<'static, str>),
    Fmt(std::fmt::Error),
    Io(std::io::Error),
}

这会导致以下实现被自动生成

impl From<std::fmt::Error> for Error {
    fn from(val: std::fmt::Error) -> Self {
        Self::Fmt(val)
    }
}

impl From<std::io::Error> for Error {
    fn from(val: std::io::Error) -> Self {
        Self::Io(val)
    }
}

依赖关系

~1.5MB
~36K SLoC