Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::mem;
- #[derive(Debug)]
- struct Foo {
- a: u8,
- b: u8,
- }
- #[macro_export]
- macro_rules! parse_bytes {
- ( $buf:expr; ) => {};
- ( $buf:expr; $( $t:tt => $field:expr ),+ ) => {
- let mut index: usize = 0;
- $(
- _parse_field!($t => $buf; $field; index);
- )+
- }
- }
- macro_rules! _parse_field {
- ( u8 => $buf:expr; $field:expr; $index:expr ) => {
- $field = u8::from_le_bytes([$buf[$index]]);
- $index += 1;
- };
- ( u16 => $buf:expr; $field:expr; $index:expr ) => {
- $field = u16::from_le_bytes([$buf[$index], $buf[$index+1]]);
- $index += 2;
- };
- ( u32 => $buf:expr; $field:expr; $index:expr ) => {
- $field = u16::from_le_bytes([$buf[$index], $buf[$index+1], $buf[$index+2], $buf[$index+3]]);
- $index += 4;
- };
- }
- fn main() {
- let mut x = Foo {a:0, b:0};
- let buf: &[u8] = &[1, 2];
- parse_bytes!{buf;
- u8 => x.a,
- u8 => x.b
- }
- println!("{:?}", x);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement