diff --git a/source/durandal/bin.rs b/source/durandal/bin.rs index 49400e0..a9b3a21 100644 --- a/source/durandal/bin.rs +++ b/source/durandal/bin.rs @@ -7,80 +7,80 @@ use std::{fmt, num::NonZeroU16}; #[macro_export] macro_rules! _durandal_read_impl { // big endian - (BE $b:ident $nam:ident u16 $n:expr) => { - _durandal_read_impl!($b u16::from_be_bytes, $nam 2 $n); + (BE $b:expr; $nam:ident u16 $n:expr) => { + _durandal_read_impl!($b; u16::from_be_bytes, $nam 2 $n); }; - (BE $b:ident $nam:ident i16 $n:expr) => { - _durandal_read_impl!($b i16::from_be_bytes, $nam 2 $n); + (BE $b:expr; $nam:ident i16 $n:expr) => { + _durandal_read_impl!($b; i16::from_be_bytes, $nam 2 $n); }; - (BE $b:ident $nam:ident u32 $n:expr) => { - _durandal_read_impl!($b u32::from_be_bytes, $nam 4 $n); + (BE $b:expr; $nam:ident u32 $n:expr) => { + _durandal_read_impl!($b; u32::from_be_bytes, $nam 4 $n); }; - (BE $b:ident $nam:ident i32 $n:expr) => { - _durandal_read_impl!($b i32::from_be_bytes, $nam 4 $n); + (BE $b:expr; $nam:ident i32 $n:expr) => { + _durandal_read_impl!($b; i32::from_be_bytes, $nam 4 $n); }; // little endian - (LE $b:ident $nam:ident u16 $n:expr) => { - _durandal_read_impl!($b u16::from_le_bytes, $nam 2 $n); + (LE $b:expr; $nam:ident u16 $n:expr) => { + _durandal_read_impl!($b; u16::from_le_bytes, $nam 2 $n); }; - (LE $b:ident $nam:ident i16 $n:expr) => { - _durandal_read_impl!($b i16::from_le_bytes, $nam 2 $n); + (LE $b:expr; $nam:ident i16 $n:expr) => { + _durandal_read_impl!($b; i16::from_le_bytes, $nam 2 $n); }; - (LE $b:ident $nam:ident u32 $n:expr) => { - _durandal_read_impl!($b u32::from_le_bytes, $nam 4 $n); + (LE $b:expr; $nam:ident u32 $n:expr) => { + _durandal_read_impl!($b; u32::from_le_bytes, $nam 4 $n); }; - (LE $b:ident $nam:ident i32 $n:expr) => { - _durandal_read_impl!($b i32::from_le_bytes, $nam 4 $n); + (LE $b:expr; $nam:ident i32 $n:expr) => { + _durandal_read_impl!($b; i32::from_le_bytes, $nam 4 $n); }; // either endianness - ($e:ident $b:ident $nam:ident Angle $n:expr) => { - _durandal_read_impl!($e $b $nam u16 $n); + ($e:ident $b:expr; $nam:ident Angle $n:expr) => { + _durandal_read_impl!($e $b; $nam u16 $n); let $nam = Angle::from_bits($nam); }; - ($e:ident $b:ident $nam:ident Fixed $n:expr) => { - _durandal_read_impl!($e $b $nam u32 $n); + ($e:ident $b:expr; $nam:ident Fixed $n:expr) => { + _durandal_read_impl!($e $b; $nam u32 $n); let $nam = Fixed::from_bits($nam); }; - ($e:ident $b:ident $nam:ident Unit $n:expr) => { - _durandal_read_impl!($e $b $nam u16 $n); + ($e:ident $b:expr; $nam:ident Unit $n:expr) => { + _durandal_read_impl!($e $b; $nam u16 $n); let $nam = Unit::from_bits($nam); }; - ($e:ident $b:ident $nam:ident OptU16 $n:expr) => { - _durandal_read_impl!($e $b $nam u16 $n); + ($e:ident $b:expr; $nam:ident OptU16 $n:expr) => { + _durandal_read_impl!($e $b; $nam u16 $n); let $nam = OptU16::from_repr($nam); }; - ($e:ident $b:ident $nam:ident usize u16 $n:expr) => { - _durandal_read_impl!($e $b $nam u16 $n); + ($e:ident $b:expr; $nam:ident usize u16 $n:expr) => { + _durandal_read_impl!($e $b; $nam u16 $n); let $nam = usize::from($nam); }; - ($e:ident $b:ident $nam:ident usize u32 $n:expr) => { - _durandal_read_impl!($e $b $nam u32 $n); + ($e:ident $b:expr; $nam:ident usize u32 $n:expr) => { + _durandal_read_impl!($e $b; $nam u32 $n); let $nam = usize_from_u32($nam); }; // no endianness - ($_:ident $b:ident $nam:ident u8 $n:expr) => {let $nam = $b[$n];}; - ($_:ident $b:ident $nam:ident slice u8 $n:expr) => {let $nam = &$b[$n];}; - ($_:ident $b:ident $nam:ident i8 $n:expr) => { + ($_:ident $b:expr; $nam:ident u8 $n:expr) => {let $nam = $b[$n];}; + ($_:ident $b:expr; $nam:ident slice u8 $n:expr) => {let $nam = &$b[$n];}; + ($_:ident $b:expr; $nam:ident i8 $n:expr) => { let $nam = i8::from_ne_bytes([$b[$n]]); }; - ($_:ident $b:ident $nam:ident Ident $n:expr) => { + ($_:ident $b:expr; $nam:ident Ident $n:expr) => { let $nam = Ident([$b[$n], $b[$n + 1], $b[$n + 2], $b[$n + 3]]); }; - ($_:ident $b:ident $nam:ident $f:ident $n:expr) => { + ($_:ident $b:expr; $nam:ident $f:ident $n:expr) => { let $nam = $f(&$b[$n])?; }; - ($_:ident $b:ident $nam:ident no_try $f:ident $n:expr) => { + ($_:ident $b:expr; $nam:ident no_try $f:ident $n:expr) => { let $nam = $f(&$b[$n]); }; // worker - creates let statement - ($b:ident $pth:path , $nam:ident 2 $n:expr) => { + ($b:expr; $pth:path , $nam:ident 2 $n:expr) => { let $nam = $pth([$b[$n], $b[$n + 1]]); }; - ($b:ident $pth:path , $nam:ident 4 $n:expr) => { + ($b:expr; $pth:path , $nam:ident 4 $n:expr) => { let $nam = $pth([$b[$n], $b[$n + 1], $b[$n + 2], $b[$n + 3]]); }; } @@ -159,11 +159,11 @@ macro_rules! _durandal_read_impl { #[macro_export] macro_rules! read_data { ( - $sz:expr , $ty:ident in $b:ident => + $sz:expr , $ty:ident in $b:expr => $( $nam:ident = $t:ident [ $n:expr ] $( $ex:ident )* ; )* ) => { $crate::check_data!($sz, $b); - $($crate::_durandal_read_impl!($ty $b $nam $($ex)* $t $n);)* + $($crate::_durandal_read_impl!($ty $b; $nam $($ex)* $t $n);)* }; } @@ -171,7 +171,7 @@ macro_rules! read_data { #[macro_export] macro_rules! check_data { ( - $sz:expr , $b:ident + $sz:expr , $b:expr ) => { if $b.len() < $sz { return Err(err_msg("not enough data"));