elvwf

8 commits
Updated 2026-06-13 11:19:44
examples
examples/enum.rs
use elvwf::prelude::*;

#[derive(WiredEnum, Debug, Clone, PartialEq, Eq)]
#[wf(discriminant(header = ID))]
enum Request<'a, const N: usize> {
    Put(Put<'a, 8>),
    Get(Get),
    Remove(Remove<'a, N>),
}

#[derive(Wired, Debug, Clone, PartialEq, Eq)]
#[wf(header(dsl = "ID:8=0x1"))]
struct Put<'a, const N: usize> {
    #[wf(len(embedded))]
    payload: &'a [u8; N],
}

#[derive(Wired, Debug, Clone, PartialEq, Eq)]
#[wf(header(dsl = "ID:8=0x2"))]
struct Get {}

#[derive(Wired, Debug, Clone, PartialEq, Eq)]
#[wf(header(dsl = "ID:8=0x3"))]
struct Remove<'a, const N: usize> {
    #[wf(len(prefixed(format = VLE)))]
    payload: &'a [u8; N],
}

fn main() {
    let msg = Request::Remove(Remove {
        payload: &[0, 1, 2, 3],
    });

    let mut data = [0u8; 128];
    let buf = &mut &mut data[..];
    elvwf::msg::encode::<Request<4>, elvwf::scalar::VLE>(buf, msg.clone()).unwrap();

    let buf = &mut &data[..];
    let value = elvwf::msg::decode::<Request<4>, elvwf::scalar::VLE>(buf).unwrap();

    assert_eq!(msg, value);
}