#枚举 #解析器 #后备 #变体 #自动 #判别值 #表示

repr-with-fallback

自动为具有自定义判别值和后备变体的枚举生成 From 和 Into 实现器。当您可能遇到未知变体并希望保留其值时,在解析时很有用。

2 个版本

0.1.1 2022 年 9 月 17 日
0.1.0 2022 年 9 月 17 日

16#判别值


2 个包中使用(通过 toluol-proto

MIT 许可协议

11KB
157

repr-with-fallback

自动为具有自定义判别值和后备变体的枚举生成 FromInto 实现器。

用法

use repr_with_fallback::repr_with_fallback;

repr_with_fallback! {
    /// A DNSSEC algorithm.
    #[derive(Debug, PartialEq)]
    pub enum Algorithm {
        /// ...
        RSASHA256 = 8,
        RSASHA512 = 10,
        ECDSAP256SHA256 = 13,
        ECDSAP384SHA384 = 14,
        ED25519 = 15,
        Unassigned(u8),
    }
}

assert_eq!(u8::from(Algorithm::ED25519), 15);
assert_eq!(Algorithm::from(15), Algorithm::ED25519);

assert_eq!(u8::from(Algorithm::Unassigned(17)), 17);
assert_eq!(Algorithm::from(17), Algorithm::Unassigned(17));

对枚举施加了两个限制

  1. 它必须只有单元变体,除了恰好一个变体有一个未命名的字段。这用作后备变体,并且其字段的类型必须与判别值的类型匹配。
  2. 每个变体都必须提供判别值。

repr 类型不需要是数值类型

repr_with_fallback! {
    pub enum Strings {
        Foo = "static",
        Bar = "string",
        Baz = "slices",
        Spam = "work",
        Eggs = "too",
        Unknown(&'static str),
    }
}

let s: &'static str = Strings::Foo.into();
assert_eq!(s, "static");

依赖项

~1.5MB
~35K SLoC