forked from AbleOS/holey-bytes
54 lines
1.6 KiB
Rust
54 lines
1.6 KiB
Rust
macro_rules! impl_display {
|
|
(for $ty:ty => $(|$selfty:pat_param|)? $fmt:literal $(, $($param:expr),+)? $(,)?) => {
|
|
impl ::core::fmt::Display for $ty {
|
|
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
|
|
$(let $selfty = self;)?
|
|
write!(f, $fmt, $($param),*)
|
|
}
|
|
}
|
|
};
|
|
|
|
(for $ty:ty => $str:literal) => {
|
|
impl ::core::fmt::Display for $ty {
|
|
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
|
|
f.write_str($str)
|
|
}
|
|
}
|
|
};
|
|
|
|
(for $ty:ty => match {$(
|
|
$bind:pat => $($const:ident)? $fmt:literal $(,$($params:tt)*)?;
|
|
)*}) => {
|
|
impl ::core::fmt::Display for $ty {
|
|
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
|
|
match self {
|
|
$(
|
|
$bind => $crate::utils::internal::impl_display_match_fragment!($($const,)? f, $fmt $(, $($params)*)?)
|
|
),*
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#[doc(hidden)]
|
|
pub(crate) mod internal {
|
|
macro_rules! impl_display_match_fragment {
|
|
(const, $f:expr, $lit:literal) => {
|
|
$f.write_str($lit)
|
|
};
|
|
|
|
($f:expr, $fmt:literal $(, $($params:tt)*)?) => {
|
|
write!($f, $fmt, $($($params)*)?)
|
|
};
|
|
}
|
|
|
|
pub(crate) use impl_display_match_fragment;
|
|
}
|
|
|
|
macro_rules! static_assert(($expr:expr $(,)?) => {
|
|
const _: [(); !$expr as usize] = [];
|
|
});
|
|
|
|
pub(crate) use {impl_display, static_assert};
|