make read_data use expr for $b
parent
119a45310d
commit
1eb7088a8b
|
@ -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"));
|
||||
|
|
Loading…
Reference in New Issue