Macro serde_aux::enum_number_declare[][src]

macro_rules! enum_number_declare {
    ($name : ident { $($variant : ident = $value : expr,) * }) => { ... };
}
Expand description

This contains both serialization and ser/deserialization of a enum into and from numbers. The reference implementation does not work if your enum has negative values. This enum_number handles this also.

Example

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());
}