#枚举 #助手 #组合 #变体 # #类型 #三个

unite

将现有类型组合成枚举的辅助宏

1 个不稳定版本

0.1.2 2021年8月11日

#2156 in 过程宏

MIT 协议

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