#derive #traits #from #into

derive-from-one

自动生成 From 实现,无需手动编写

1 个不稳定版本

0.1.0 2023年8月14日

#744过程宏

MIT 许可证

12KB
174

derive-from-one

github crates.io docs.rs

自动为枚举和结构体生成 From 实现。

安装

添加到 Cargo.toml

derive-from-one = "0.1"

使用

此宏为具有单个字段的枚举构造函数生成 From 实现。

如果您不想生成某些实现,请将 #[from)] 应用到此标签。

此外,该宏会自动跳过模糊的类型,即类型无论在多少标签中出现都会被跳过。

示例

use derive_from_one::FromOne;

#[derive(FromOne)]
enum Enum {
    A { a: u32 },           // GENERATES From impl
    B(bool),                // GENERATES From impl
    #[from(skip)]
    C(String),              // DOES NOT GENERATE From impl due to #[from(skip)] attribute
    D {                     // DOES NOT GENERATE From impl due to multiple fields
        foo: Vec<String>,
        bar: &'static str,
    },
    E(Vec<String>)          // DOES NOT GENERATE From impl due to Vec<String> appears in D tag
}

生成代码

enum Enum {
    A { a: u32 },
    B(bool),
    C(String),
    D {
        foo: Vec<String>,
        bar: &'static str,
    },
    E(Vec<String>)
}

impl From<u32> for Enum {
    fn from(x: u32) -> Self {
        Self::A { a: x }
    }
}

impl From<bool> for Enum {
    fn from(x: bool) -> Self {
        Self::B(x)
    }
}

您还可以将此宏应用于具有单个字段的元组。

use derive_from_one::FromOne;

#[derive(FromOne)]
struct StructOne(usize);

#[derive(FromOne)]
struct StructTwo { a: usize }

许可证

MIT.

依赖项

~275–720KB
~17K SLoC