#macro-derive #i32 #bool #u32 #enums

nightly derive_from

一个简单的 derive(From) 宏

1 个不稳定版本

使用旧的 Rust 2015

0.1.1 2016年3月24日

#1825 in Rust 模式

MIT 许可证

6KB
93

derive_from

Rust derive(From) 宏

它只适用于只有一个元素的元组结构体(newtypes)或包含这些元组结构体的枚举。这些元组结构体包裹的类型可以通过使用 .into() 方法简单地进行转换。

对于枚举,由于这可能会导致歧义,因此不会为出现多次的类型生成 from 代码。

它可以这样简单地使用

#[derive(From)]
struct MyInt(i32);

#[derive(From)]
enum MyIntEnum{
    Int(i32),
    Bool(bool),
    UnsignedOne(u32),
    UnsignedTwo(u32),
    Nothing,
}

编译后生成的代码将如下所示

struct MyInt(i32);
impl ::std::convert::From<i32> for MyInt {
    fn from(a: i32) -> MyInt { MyInt(a) }
}


enum MyIntEnum {
    Int(i32),
    Bool(bool),
    UnsignedOne(u32),
    UnsignedTwo(u32),
    Nothing,
}
impl ::std::convert::From<i32> for MyIntEnum {
    fn from(a: i32) -> MyIntEnum { MyIntEnum::Int(a) }
}
impl ::std::convert::From<bool> for MyIntEnum {
    fn from(a: bool) -> MyIntEnum { MyIntEnum::Bool(a) }
}

由于这一点以及 Rust 的内置类型推断,现在可以进行以下操作

fn main() {
    let my_enum_val = MyIntEnum::Int(5);

    if en_enum_val == 5.into() {
        println!("The content of my_enum_val is 5")
    }
}

无运行时依赖