Crate repr_with_fallback
source · [−]Expand description
Automatically generate From
and Into
impls for enum
s with custom discriminant values
and a fallback variant.
Usage
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));
There are two restrictions imposed on the enum
:
- It must have only unit variants, except for exactly one variant with exactly one unnamed field. This is used as the fallback variant, and the type of its field must match the type of the discriminants.
- Every variant must have a discriminant value provided.
The repr type does not need to be numerical:
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");