#variant-name #variant #string #enums #string-conversion #string-representation #derive

enum-variants-strings

通过枚举变种名称在枚举实例与str之间进行转换的宏

6个版本

0.3.0 2024年3月1日
0.2.3 2023年4月11日
0.2.2 2023年3月7日
0.2.1 2023年1月25日
0.1.0 2021年12月22日

#900Rust模式

Download history 59/week @ 2024-04-08 33/week @ 2024-04-15 42/week @ 2024-04-22 29/week @ 2024-04-29 41/week @ 2024-05-06 33/week @ 2024-05-13 62/week @ 2024-05-20 52/week @ 2024-05-27 52/week @ 2024-06-03 40/week @ 2024-06-10 46/week @ 2024-06-17 43/week @ 2024-06-24 4/week @ 2024-07-01 65/week @ 2024-07-08 85/week @ 2024-07-15 36/week @ 2024-07-22

每月196次下载
用于 10 个crate(7个直接使用)

MIT 许可

5KB

Enum Variants Strings

Crates.io badge Docs.rs badge

根据变种标识符生成枚举到字符串和字符串到枚举的转换

use enum_variants_strings::EnumVariantsStrings;

#[derive(Debug, PartialEq, EnumVariantsStrings)]
enum Variants {
    X,
    Y(i32),
    #[enum_variants_strings_mappings("z", "zee")]
    Z {
        x: String,
        y: String,
    },
}

fn main() {
    assert_eq!(Variants::from_str("x"), Ok(Variants::X));
    assert_eq!(Variants::from_str("y"), Ok(Variants::Y(0)));
    assert_eq!(
        Variants::from_str("z"),
        Ok(Variants::Z {
            x: String::default(),
            y: String::default(),
        })
    );

    assert_eq!(Variants::X.to_str(), "x");
    assert_eq!(
        Variants::Z {
            x: "abc".into(),
            y: "xyz".into()
        }
        .to_str(),
        "zee"
    );
}

标识符映射

默认情况下,变种标识符/名称被转换为蛇形命名版本

这可以通过以下方式更改:#[enum_variants_strings_transform(transform = ...)]

use enum_variants_strings::EnumVariantsStrings;

#[derive(Debug, PartialEq, EnumVariantsStrings)]
#[enum_variants_strings_transform(transform = "none")]
enum EnumA {
    Foo,
    Bar,
}

有几个转换

  • "snake_case",用_分隔大小写和数字边界(默认)
  • "kebab_case",用-代替下划线进行蛇形命名
  • "upper_case",源标识符的大写
  • "lower_case",源标识符的小写
  • "none",从源标识符不进行映射

依赖项

~315–770KB
~18K SLoC