macro_rules! impl_conditional_function_debug_display {
($struct_name:ident < $t:ident, $r:ident >) => {
impl<$t, $r> std::fmt::Debug for $struct_name<$t, $r> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct(stringify!($struct_name))
.field("function", &self.function)
.field("predicate", &self.predicate)
.finish()
}
}
impl<$t, $r> std::fmt::Display for $struct_name<$t, $r> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{}({}, {})",
stringify!($struct_name),
self.function,
self.predicate
)
}
}
};
($struct_name:ident < $t:ident, $u:ident, $r:ident >) => {
impl<$t, $u, $r> std::fmt::Debug for $struct_name<$t, $u, $r> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct(stringify!($struct_name))
.field("function", &self.function)
.field("predicate", &self.predicate)
.finish()
}
}
impl<$t, $u, $r> std::fmt::Display for $struct_name<$t, $u, $r> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{}({}, {})",
stringify!($struct_name),
self.function,
self.predicate
)
}
}
};
}
pub(crate) use impl_conditional_function_debug_display;