enum_primitive implementation using procedural macros to have a custom derive
cargo add enum-primitive-derive