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