use std::fmt::{Debug, Formatter, Result as FmtResult};
use proc_macro2::TokenStream;
use super::Context;
pub type ValueRendererBox = Box<dyn ValueRenderer>;
impl Debug for ValueRendererBox {
fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
f.debug_struct("ValueRendererBox").finish()
}
}
pub trait ValueRenderer {
fn render(&self, ctx: &Context<'_, '_>) -> TokenStream;
}
impl<X> ValueRenderer for X
where
X: Fn(&Context<'_, '_>) -> TokenStream,
{
fn render(&self, ctx: &Context<'_, '_>) -> TokenStream {
(*self)(ctx)
}
}
impl ValueRenderer for TokenStream {
fn render(&self, _ctx: &Context<'_, '_>) -> TokenStream {
self.clone()
}
}