Documentation
pub type BoxedFmt<'lt> = Fmt<Box<dyn Fn(&mut core::fmt::Formatter) -> core::fmt::Result + 'lt>>;

pub struct Fmt<F>(pub F)
where
    F: Fn(&mut core::fmt::Formatter) -> core::fmt::Result;

impl<F> core::fmt::Display for Fmt<F>
where
    F: Fn(&mut core::fmt::Formatter) -> core::fmt::Result,
{
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        (self.0)(f)
    }
}

impl<F> core::fmt::Debug for Fmt<F>
where
    F: Fn(&mut core::fmt::Formatter) -> core::fmt::Result,
{
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        (self.0)(f)
    }
}

#[macro_export]
macro_rules! fmt {
    (type $lt: lifetime) => { $crate::fmt::Fmt<impl Fn(&mut core::fmt::Formatter) -> core::fmt::Result + $lt> };
    (type) => { $crate::fmt::Fmt<impl Fn(&mut core::fmt::Formatter) -> core::fmt::Result> };
}

pub use fmt;