2 个版本
0.1.1 | 2022 年 9 月 17 日 |
---|---|
0.1.0 | 2022 年 9 月 17 日 |
16 在 #判别值
在 2 个包中使用(通过 toluol-proto)
11KB
157 行
repr-with-fallback
自动为具有自定义判别值和后备变体的枚举生成 From
和 Into
实现器。
用法
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));
对枚举施加了两个限制
- 它必须只有单元变体,除了恰好一个变体有一个未命名的字段。这用作后备变体,并且其字段的类型必须与判别值的类型匹配。
- 每个变体都必须提供判别值。
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