macro_rules! collect_field {
($context:expr, $stop:expr, $on_eos:expr) => ({
bs_collect!($context,
if !is_header_field($context.byte) || $stop {
break;
},
$on_eos
);
});
($context:expr, $on_eos:expr) => ({
bs_collect!($context,
if !is_header_field($context.byte) {
break;
},
$on_eos
);
});
}
macro_rules! collect_hex8 {
($context:expr, $error:expr) => ({
bs_next!($context);
(
if is_digit!($context.byte) {
($context.byte - b'0') << 4
} else if b'@' < $context.byte && $context.byte < b'G' {
($context.byte - 0x37) << 4
} else if b'`' < $context.byte && $context.byte < b'g' {
($context.byte - 0x57) << 4
} else {
return Err($error($context.byte));
} as u8
)
+
{
bs_next!($context);
(
if is_digit!($context.byte) {
$context.byte - b'0'
} else if b'@' < $context.byte && $context.byte < b'G' {
$context.byte - 0x37
} else if b'`' < $context.byte && $context.byte < b'g' {
$context.byte - 0x57
} else {
return Err($error($context.byte));
} as u8
)
}
});
}
macro_rules! collect_hex8_iter {
($iter:expr, $context:expr, $error:expr) => ({
bs_next!($context);
(
if is_digit!($context.byte) {
($context.byte - b'0') << 4
} else if b'@' < $context.byte && $context.byte < b'G' {
($context.byte - 0x37) << 4
} else if b'`' < $context.byte && $context.byte < b'g' {
($context.byte - 0x57) << 4
} else {
(*$iter.on_error)($error($context.byte));
return None;
} as u8
)
+
{
bs_next!($context);
(
if is_digit!($context.byte) {
$context.byte - b'0'
} else if b'@' < $context.byte && $context.byte < b'G' {
$context.byte - 0x37
} else if b'`' < $context.byte && $context.byte < b'g' {
$context.byte - 0x57
} else {
(*$iter.on_error)($error($context.byte));
return None;
} as u8
)
}
});
}
macro_rules! collect_quoted_field {
($context:expr, $on_eos:expr) => ({
bs_collect!($context,
if !is_quoted_header_field($context.byte) {
break;
},
$on_eos
);
});
}
macro_rules! collect_tokens {
($context:expr, $stop:expr, $on_eos:expr) => ({
bs_collect!($context,
if !is_token($context.byte) || $stop {
break;
},
$on_eos
);
});
($context:expr, $on_eos:expr) => ({
bs_collect!($context,
if !is_token($context.byte) {
break;
},
$on_eos
);
});
}
macro_rules! collect_visible_7bit {
($context:expr, $stop:expr, $on_eos:expr) => ({
bs_collect!($context,
if is_not_visible_7bit!($context.byte) || $stop {
break;
},
$on_eos
);
});
($context:expr, $on_eos:expr) => ({
bs_collect!($context,
if is_not_visible_7bit!($context.byte) {
break;
},
$on_eos
);
});
}
macro_rules! consume_linear_space {
($context:expr, $on_eos:expr) => ({
bs_available!($context) > 0 || $on_eos;
unsafe {
if bs_starts_with1!($context, b" ") || bs_starts_with1!($context, b"\t") {
loop {
bs_available!($context) > 0 || $on_eos;
bs_next!($context);
if !($context.byte == b' ' || $context.byte == b'\t') {
break;
}
}
} else {
bs_next!($context);
}
}
});
}
macro_rules! consume_spaces {
($context:expr, $on_eos:expr) => ({
bs_available!($context) > 0 || $on_eos;
unsafe {
if bs_starts_with1!($context, b" ") {
loop {
bs_available!($context) > 0 || $on_eos;
bs_next!($context);
if $context.byte != b' ' {
break;
}
}
} else {
bs_next!($context);
}
}
});
}