Macro serde_aux::serde_aux_enum_number_declare
[−]
[src]
macro_rules! serde_aux_enum_number_declare { ($name:ident { $($variant:ident = $value:expr, )* }) => { ... }; }
This contains both serialization and deserialization a enum into/from numbers.
The [reference implementation] does not work if your enum has negative values.
This enum_number
handles this also.
Example
#[macro_use] extern crate serde_derive; #[macro_use] extern crate serde_aux; extern crate serde_json; extern crate serde; serde_aux_enum_number_declare!(TestEnum { Up = 1, None = 0, Down = -1, }); fn main() { let s = r#"1"#; let a: TestEnum = serde_json::from_str(s).unwrap(); assert_eq!(a, TestEnum::Up); let s = r#"0"#; let a: TestEnum = serde_json::from_str(s).unwrap(); assert_eq!(a, TestEnum::None); let s = r#"-1"#; let a: TestEnum = serde_json::from_str(s).unwrap(); assert_eq!(a, TestEnum::Down); let s = r#"5"#; assert!(serde_json::from_str::<TestEnum>(s).is_err()); }