| Crates.io | enum-from-discriminant-derive |
| lib.rs | enum-from-discriminant-derive |
| version | 1.0.0 |
| created_at | 2025-09-29 09:22:47.910457+00 |
| updated_at | 2025-09-29 09:22:47.910457+00 |
| description | Macro to implement TryFrom |
| homepage | |
| repository | https://github.com/MarimeGui/enum-from-discriminant-derive |
| max_upload_size | |
| id | 1859284 |
| size | 10,958 |
enum-from-discriminant-deriveCrate that provides a single Proc Macro to use on enums, TryFromDiscriminant.
It implements TryFrom<T> on an enum to turn numeric signed and unsigned values into an enum variant based on discriminant value.
Depending on the value of the biggest discriminant, TryFrom<u8>, TryFrom<u16>,
TryFrom<u32>, TryFrom<u64>, TryFrom<usize>, TryFrom<i8>, TryFrom<i16>,
TryFrom<i32>, TryFrom<i64> and TryFrom<isize> will be implemented.
Example:
use enum_from_discriminant_derive::TryFromDiscriminant;
#[derive(TryFromDiscriminant)]
enum MyCoolEnum {
// Discriminant is implied to be 0 for FirstVariant...
FirstVariant,
// ... 1 for SecondVariant...
SecondVariant,
// ... and 16381 for ThirdVariant explicitly.
ThirdVariant = 16381
}
// As the biggest discriminant (16381) does not fit in a u8, `TryFrom<u8>` and `TryFrom<i8>` will NOT be implemented.
// However, all others will be.
fn is_second(value: u16) -> bool {
match MyCoolEnum::try_from(value).expect("not a valid discriminant") {
MyCoolEnum::SecondVariant => true,
_ => false,
}
}