macro_rules! method_forward {
($repr:tt { $(
$(#[$meta:meta])*
fn $name:ident($( $arg:ident : $arg_ty:ty ),*) $(-> $ret:ty)?
);+$(;)? }) => {
$(
$(#[$meta])*
#[cfg_attr(not(coverage), inline(always))]
fn $name(&mut self, $( $arg : $arg_ty ),*) $(-> $ret)? {
match &mut self.$repr {
Repr::Inline(buffer) => buffer.$name($( $arg ),*),
Repr::Heap(bytes) => bytes.$name($( $arg ),*),
}
}
)*
};
($(
$(#[$meta:meta])*
fn $name:ident($($arg:ident : $arg_ty:ty ),*) $(-> $ret:ty)?
);+$(;)?) => {
$(
$(#[$meta])*
#[cfg_attr(not(coverage), inline(always))]
fn $name(&mut self, $( $arg : $arg_ty ),*) $(-> $ret)? {
Self::$name(self, $( $arg ),*)
}
)*
};
}
macro_rules! forward_buf_mut {
($repr:tt { $($suffix:ident), +$(,)? }) => {
paste::paste! {
$(
$crate::macros::method_forward! { $repr {
fn [< put_ $suffix >](val: $suffix);
fn [< put_ $suffix _le >](val: $suffix);
fn [< put_ $suffix _ne >](val: $suffix);
}}
)*
$crate::macros::method_forward! {$repr {
fn put_i8(val: i8);
fn put_u8(val: u8);
fn put_uint(n: u64, nbytes: usize);
fn put_uint_le(n: u64, nbytes: usize);
fn put_uint_ne(n: u64, nbytes: usize);
fn put_int(n: i64, nbytes: usize);
fn put_int_le(n: i64, nbytes: usize);
fn put_int_ne(n: i64, nbytes: usize);
}}
}
};
($($suffix:ident), +$(,)?) => {
paste::paste! {
$(
$crate::macros::method_forward! {
fn [< put_ $suffix >](val: $suffix);
fn [< put_ $suffix _le >](val: $suffix);
fn [< put_ $suffix _ne >](val: $suffix);
}
)*
$crate::macros::method_forward! {
fn put_i8(val: i8);
fn put_u8(val: u8);
fn put_uint(n: u64, nbytes: usize);
fn put_uint_le(n: u64, nbytes: usize);
fn put_uint_ne(n: u64, nbytes: usize);
fn put_int(n: i64, nbytes: usize);
fn put_int_le(n: i64, nbytes: usize);
fn put_int_ne(n: i64, nbytes: usize);
}
}
};
}
pub(super) use forward_buf_mut;
pub(super) use method_forward;
#[macro_export]
macro_rules! format_utf8bytes {
($($tt:tt)*) => {{
let mut value = $crate::Utf8BytesMut::new();
::core::fmt::Write::write_fmt(&mut value, ::core::format_args!($($tt)*))
.expect("a formatting trait implementation returned an error");
value.freeze_shared()
}};
}
#[macro_export]
macro_rules! format_compact_utf8bytes {
($($tt:tt)*) => {{
let mut value = $crate::Utf8BytesMut::new();
::core::fmt::Write::write_fmt(&mut value, ::core::format_args!($($tt)*))
.expect("a formatting trait implementation returned an error");
value.freeze_compact()
}};
}