#枚举 #变体 #显示 #自动 #从字符串 #生成 #其他

to_and_fro

为枚举变体生成 Display 和 FromStr 实现的过程宏

15 个版本 (5 个重大更改)

0.6.0 2024年7月26日
0.5.3 2024年5月28日
0.5.1 2024年4月7日
0.5.0 2024年2月20日
0.1.0 2023年11月24日

#1875过程宏

Download history 133/week @ 2024-05-08 25/week @ 2024-05-15 138/week @ 2024-05-22 72/week @ 2024-05-29 11/week @ 2024-06-05 3/week @ 2024-06-12 1/week @ 2024-07-03 231/week @ 2024-07-24 43/week @ 2024-07-31 3/week @ 2024-08-07 5/week @ 2024-08-14

每月 282 次下载
3 crates 中使用

MIT 许可证

19KB
272

来,以及 Fro

为 Enum 提供自动实现 Display、FromStr 以及其他功能的实现

通过 cargo 可用

cargo add to_and_fro

实现

#[derive(ToAndFro)]
pub enum TestEnum {
  ValueOne,
  ValueTwo,
  ValueThree
}

TestEnum::ValueOne.to_string()  // "ValueOne"
TestEnum::from_str("ValueTwo")  //  TestEnum::ValueTwo

TestEnum::from_str("ValueFour") // anyhow::Error("Invalid variant ValueFour for enum TestEnum")

大小写

#[derive(ToAndFro)]
pub enum TestEnum {
  #[input_case("snake")]        // FromStr will parse only snake_case input
  ValueOne,
  #[output_case("kebab")]       // Display methods will produce a kebab-case output
  ValueTwo,
  ValueThree                    // Defaults to as written input, and as-written output
}

FromStr 的回退

#[derive(ToAndFro)]
#[default("Fallback")]
pub enum TestEnum {
  Fallback,
  ValueOne,
  ValueTwo,
  ValueThree
}

TestEnum::from_str("ValueFour") // TestEnum::Fallback

不允许字段解析为 FromStr

#[derive(ToAndFro)]
pub enum TestEnum {
  #[reject]
  ValueOne,
  ValueTwo
}

TestEnum::from_str("ValueOne")  // anyhow::Error("Invalid variant ValueOne for enum TestEnum")

serde 实现 SerializeDeserialize

#[derive(ToAndFro)]
#[serde]
pub enum TestEnum {
  ValueOne,
  ValueTwo,
  ValueThree
}

支持的案例列表

反馈

我非常感谢所有形式的反馈。
如果您想特别提交一个 错误报告功能建议,请通过 issues 部分的模板进行。

  • Synstructure,一个crate,提供用于匹配枚举变体的辅助类型,以及以泛型方式提取派生自Struct或Enum的每个字段的绑定。
  • Heck,一个crate,旨在提供常见情况(如驼峰式和蛇形命名)之间的案例转换。它旨在具有Unicode意识、内部一致性和合理的性能。

依赖项

~0.9–1.8MB
~39K SLoC