macro_rules! _ctx_endian {
(endian: little) => {
Endian::Little
};
(endian: big) => {
Endian::Big
};
}
macro_rules! _data_type_static {
(data: u8) => {
u8
};
(data: str) => {
&str
};
}
macro_rules! _data_type {
(data: u8) => {
u8
};
(data: str) => {
StringDeku
};
}
macro_rules! _data_convert {
(data: u8, $var:ident) => {
$var.to_vec()
};
(data: str, $var:ident) => {
$var.into_iter()
.map(|&item| StringDeku::new(item))
.collect::<Vec<StringDeku>>()
};
}
macro_rules! _deku_ctx {
(data: u8, ctx: prime, $layout:ident, $endian: ident) => {
(_ctx_endian!(endian: $endian), paste! {[<LAYOUT_ $layout:upper>]})
};
( data: str, ctx: prime, $layout:ident, $endian: ident)=> {
(_ctx_endian!(endian: $endian), paste! {[<LAYOUT_ $layout:upper>]}, STRING_CTX)
};
(data: u8, ctx: alt, $layout:ident, $endian: ident) => {
(_ctx_endian!(endian: $endian), paste! {[<LAYOUT_ $layout:upper>]})
};
( data: str, ctx: alt, $layout:ident, $endian: ident)=> {
(_ctx_endian!(endian: $endian), (paste! {[<LAYOUT_ $layout:upper>]}, STRING_CTX))
};
}
macro_rules! _deku_ctx_type {
(data: u8, ctx: prime) => {
(Endian, VecLayout)
};
( data: str, ctx: prime) => {
(Endian, VecLayout, (Encoding, StringLayout))
};
(data: u8, ctx: alt) => {
(Endian, VecLayout)
};
( data: str, ctx: alt) => {
(Endian, (VecLayout, (Encoding, StringLayout)))
};
}
macro_rules! _match_error {
(error: assertion) => {
deku::DekuError::Assertion(_)
};
(error: parse) => {
deku::DekuError::Parse(_)
};
(error: incomplete) => {
deku::DekuError::Incomplete(deku::error::NeedSize { .. })
};
(error: io) => {
deku::DekuError::Io(_)
};
}
macro_rules! _rejected_check {
($value: ident, error: $error: ident) => {
assert!(
matches!($value, _match_error!(error: $error)),
"value doesn't match! {:#?}",
$value
)
};
}
pub(crate) use {
_ctx_endian, _data_convert, _data_type, _data_type_static, _deku_ctx,
_deku_ctx_type, _match_error, _rejected_check,
};