2个版本
0.1.1 | 2019年1月30日 |
---|---|
0.1.0 | 2019年1月30日 |
#6 in #变异
在2个crate中使用(通过dasn1-notation)
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