Macro spinel_pack::spinel_read
spinel_read!() { /* proc-macro */ }
Expand description
In-line proc macro for parsing spinel-formatted data fields from a byte slice iterator.
ยงExample
// The data to parse.
let bytes: &[u8] = &[
0x01, 0x02, 0x83, 0x03, 0xef, 0xbe, 0xad, 0xde,
0x31, 0x32, 0x33, 0x00, 0x02, 0xf1, 0xf2, 0xf3,
0xf4, 0xf5, 0xf6, 0xf7,
];
// The variables that we will place
// the parsed values into. Note that
// currently these need to be initialized
// before they can be used with `spinel_read`.
let mut foo: u8 = 0;
let mut bar: u32 = 0;
let mut blah: u32 = 0;
let mut bleh: u32 = 0;
let mut name: String = Default::default();
let mut addr: spinel_pack::EUI64 = Default::default();
// Parse the data.
spinel_read!(&mut bytes.iter(), "CiiLUE", foo, bar, blah, bleh, name, addr)
.expect("spinel_read failed");
// Verify that the variables match
// the values we expect.
assert_eq!(foo, 1);
assert_eq!(bar, 2);
assert_eq!(blah, 387);
assert_eq!(bleh, 0xdeadbeef);
assert_eq!(name, "123");
assert_eq!(addr, spinel_pack::EUI64([0x02, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7]));