1pub type BoxedFmt<'lt> = Fmt<Box<dyn Fn(&mut core::fmt::Formatter) -> core::fmt::Result + 'lt>>;
2
3pub struct Fmt<F>(pub F)
4where
5 F: Fn(&mut core::fmt::Formatter) -> core::fmt::Result;
6
7impl<F> core::fmt::Display for Fmt<F>
8where
9 F: Fn(&mut core::fmt::Formatter) -> core::fmt::Result,
10{
11 fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
12 (self.0)(f)
13 }
14}
15
16impl<F> core::fmt::Debug for Fmt<F>
17where
18 F: Fn(&mut core::fmt::Formatter) -> core::fmt::Result,
19{
20 fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
21 (self.0)(f)
22 }
23}
24
25#[macro_export]
26macro_rules! fmt {
27 (type $lt: lifetime) => { $crate::fmt::Fmt<impl Fn(&mut core::fmt::Formatter) -> core::fmt::Result + $lt> };
28 (type) => { $crate::fmt::Fmt<impl Fn(&mut core::fmt::Formatter) -> core::fmt::Result> };
29}
30
31pub use fmt;