std_lib/
fmt.rs

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;