pub trait LayoutRenderPipe<ElementType, RenderCommandType> {
fn transform(
&mut self,
render_commands: impl Iterator<Item = ElementType>,
) -> impl Iterator<Item = RenderCommandType>;
}
impl<T> LayoutRenderPipe<T, T> for () {
fn transform(&mut self, render_commands: impl Iterator<Item = T>) -> impl Iterator<Item = T> {
render_commands
}
}
impl<E, R, IR: Iterator<Item = R>, F> LayoutRenderPipe<E, R> for F
where
F: for<'a> FnMut(Box<dyn Iterator<Item = E> + 'a>) -> IR,
{
fn transform(&mut self, render_commands: impl Iterator<Item = E>) -> impl Iterator<Item = R> {
self(Box::new(render_commands))
}
}