#枚举 #变异 #生成 #方法 #进程 #进程宏 #变异

变异

一个用于生成枚举变异方法的进程宏

2个版本

0.1.1 2019年1月30日
0.1.0 2019年1月30日

#6 in #变异


2个crate中使用(通过dasn1-notation

MIT/Apache

10KB
143 代码行

变异

一个用于生成枚举到变异转换方法的进程宏。

生成的函数

is_* 函数

为枚举中的每个变异生成一个 is_variant 方法。

use variation::Variation;

#[derive(Variation)]
enum Type {
    Unit,
    Integer(i32),
}

fn main() {
    let return_type = Type::Unit;

    assert!(return_type.is_unit());
    assert!(!return_type.is_integer());
}

as_* & as_*_mut 函数

具有一个或多个内部类型的变异具有 as

use variation::Variation;

#[derive(Variation)]
enum Type {
    Unit,
    Integer(i32),
    Real(i32, u32),
}

fn main() {
    let mut return_type = Type::Integer(5);
    let real_value = Type::Real(3, 14);

    assert_eq!(Some(&mut 5), return_type.as_integer_mut());
    assert_eq!(Some((&3, &14)), real_value.as_real());
    assert_eq!(None, real_value.as_integer());
}

into_* 函数

具有一个或多个内部类型的变异有一个 into 方法,允许你尝试将枚举转换为内部值。当在不符合方法的变异上调用此方法时,它将引发恐慌。

use variation::Variation;

#[derive(Variation)]
enum Type {
    Unit,
    Integer(i32),
    Real(i32, u32),
}

fn main() {
    let mut return_type = Type::Integer(5);
    let real_value = Type::Real(3, 14);
    let unit = Type::Unit;

    assert_eq!(5, return_type.into_integer());
    assert_eq!((3, 14), real_value.into_real());
    // Panics
    unit.into_integer();

}

依赖项

~2.5MB
~54K SLoC