1 个不稳定版本
0.1.0 | 2023年8月14日 |
---|
#744 在 过程宏
12KB
174 行
derive-from-one
自动为枚举和结构体生成 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