use crate::prelude::*; pub trait Template { fn render(&self, fmt: &mut Formatter) -> FmtResult; fn display(self) -> impl Display where Self: Sized, { struct D(T); impl Display for D { fn fmt(&self, fmt: &mut Formatter) -> FmtResult { self.0.render(fmt) } } D(self) } } pub struct TemplateFn(F); pub fn template_fn(f: F) -> TemplateFn where F: Fn(&mut Formatter) -> FmtResult, { TemplateFn(f) } impl Template for TemplateFn where F: Fn(&mut Formatter) -> FmtResult, { fn render(&self, fmt: &mut Formatter) -> FmtResult { self.0(fmt) } }