#macro-derive #derive #macro

macro digenum

枚举变体提取器

2 个版本

0.1.1 2022年11月19日
0.1.0 2022年11月19日

#115 in #macros

MIT 许可证

6KB
76 代码行

一个简单的枚举变体提取器

可以提取一个(可变的)引用或将字段转换为元组。当变体与预期不同时,返回 None

示例

use digenum::DigEnum;
use std::io::Read;

#[derive(DigEnum)]
enum Login<T: Read> {
    Local,
    Stream(T)
    Token([u8; 64]),
    UserAndPasswd(String, String),
}

映射到

变体 引用 可变引用 拥有
局部 None None None
(T) as_Stream-> Option<&T> as_mut_Stream-> Option<&mutT> into_Stream-> Option<T>
令牌([u8; 64]) as_Token-> Option<&[u8; 64]> as_mut_Token-> Option<&mut [u8; 64]> into_Token-> Option<[u8; 64]>
用户和密码(String, String) as_UserAndPasswd-> Option<(&String,&String)> as_mut_UserAndPasswd-> Option<(&mutString,&mutString)> into_UserAndPasswd-> Option<(String, String)>

"为什么不用蛇形命名法?"

考虑这个示例

use digenum::DigEnum;

#[derive(DigEnum)]
enum Foo {
    FOO,
    foo,
    Foo
}

我应该如何处理它?

支持

  • 空枚举
  • 空变体
  • 单字段变体
  • 多字段变体
  • 不同大小写的变体(如 Foo::FOOFoo::foo
  • 泛型变体
  • 单元变体
  • 类似于结构的变体

依赖

~1.5MB
~35K SLoC