mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-09 21:26:43 +01:00
34 lines
790 B
Rust
34 lines
790 B
Rust
use crate::*;
|
|
|
|
impl<E: Engine> LayoutMapReduce<E> for E {}
|
|
|
|
pub trait LayoutMapReduce<E: Engine> {
|
|
fn map <T, I, R, F> (iterator: I, callback: F) -> Map<E, T, I, R, F>
|
|
where
|
|
I: Iterator<Item=T>,
|
|
R: Render<E>,
|
|
F: Fn(T)->R
|
|
{
|
|
Map(Default::default(), iterator, callback)
|
|
}
|
|
fn reduce <T, I, R, F> (iterator: I, callback: F) -> Reduce<E, T, I, R, F>
|
|
where
|
|
I: Iterator<Item=T>,
|
|
R: Render<E>,
|
|
F: Fn(R, T)->R
|
|
{
|
|
Reduce(Default::default(), iterator, callback)
|
|
}
|
|
}
|
|
|
|
pub struct Map<E: Engine, T, I: Iterator<Item=T>, R: Render<E>, F: Fn(T)->R>(
|
|
PhantomData<E>,
|
|
I,
|
|
F
|
|
);
|
|
|
|
pub struct Reduce<E: Engine, T, I: Iterator<Item=T>, R: Render<E>, F: Fn(R, T)->R>(
|
|
PhantomData<(E, R)>,
|
|
I,
|
|
F
|
|
);
|