You can derive FromPrimitive
. Using Rust 2018 simplified imports syntax:
use num_derive::FromPrimitive;
use num_traits::FromPrimitive;
#[derive(FromPrimitive)]
enum MyEnum {
A = 1,
B,
C,
}
fn main() {
let x = 2;
match FromPrimitive::from_i32(x) {
Some(MyEnum::A) => println!("Got A"),
Some(MyEnum::B) => println!("Got B"),
Some(MyEnum::C) => println!("Got C"),
None => println!("Couldn't convert {}", x),
}
}
In your Cargo.toml
:
[dependencies]
num-traits = "0.2"
num-derive = "0.2"
More details in num-derive crate, see esp. sample uses in tests.