1 个不稳定版本
0.1.2 | 2021年8月11日 |
---|
#2156 in 过程宏
10KB
150 行
Unite
一个小型辅助宏,允许您将现有类型组合成枚举。
[dependencies]
unite = "0.1"
用法
use unite::unite;
pub struct One(bool);
pub struct Two(i32);
pub struct Three(f64);
unite! {
// defines a new enum with a variant for each struct
pub enum Any { One, Two, Three }
}
这将扩展为
pub enum Any {
One(One),
Two(Two),
Three(Three),
}
重命名
默认情况下,枚举变体使用与类型相同的名称,但可以进行重命名。
unite! {
enum Foo {
SameName,
Renamed = i32,
}
}
助手
生成的枚举带有便于访问其变体的辅助函数。变体名称自动转换为函数名称的snake_case
。
fn foo(any: Any) {
// checks whether the enum is a specific variant
let is_one: bool = any.is_one();
// attempts to cast the enum to a specific variant
let as_two: Option<&Two> = any.as_two();
let as_three_mut: Option<&mut Three> = any.as_three_mut();
}
生成的枚举还固有地实现了From<Variant>
。
let any: Any = One(true).into();
依赖项
~2MB
~42K SLoC