enum_parse 0.1.0

Procedural macro generating boilerplate code for parsing enum variants
Documentation
/* SPDX-License-Identifier: MIT
 * Copyright(c) 2023 Darek Stojaczyk
 */

use enum_parse::*;
use zerocopy::{AsBytes, FromBytes, FromZeroes};

const HELLO_PACKET_ID: usize = 0xAA;

#[enum_parse(derive(Debug, Default, FromBytes, AsBytes, FromZeroes),
             repr(C, packed),
             attr(parse_fn = read_from))]
pub enum Payload {
    #[attr(ID = HELLO_PACKET_ID)]
    Hello { a: u8, b: u64, c: u64, d: u8 },
    #[attr(ID = 0x42)]
    Goodbye { a: u8, e: u8 },
    #[attr(ID = _)]
    Invalid { some_always_present_byte: u8 },
}

#[test]
fn compile_struct2() {
    assert_eq!(Hello::ID, HELLO_PACKET_ID);
}