use crate::core::{Consumer, Executor, Folder, IndexedProducer, Producer, Reducer}; #[derive(Default)] pub struct Sequential; impl<'a, T1, T2, T3> Executor<'a, T1, T2, T3> for Sequential where T1: Send + 'a, T2: Send + 'a, T3: Send + 'a, { type Result = T1; type Inner = Sequential; fn exec(self, producer: P, consumer: C) -> Self::Result where P: Producer + 'a, C: Consumer + 'a, R: Reducer, { if consumer.is_full() { consumer.into_folder().complete() } else { producer.fold_with(consumer.into_folder()).complete() } } fn exec_indexed(self, producer: P, consumer: C) -> Self::Result where P: IndexedProducer, C: Consumer, R: Reducer, { if consumer.is_full() { consumer.into_folder().complete() } else { producer.fold_with(consumer.into_folder()).complete() } } fn ready(self, value: T1) -> Self::Result { value } fn split(self) -> (Self, Self) { (Self, Self) } fn join(left: T1, right: T1, reducer: R) -> Self::Result where R: Reducer + Send, { reducer.reduce(left, right) } fn into_inner(self) -> Self::Inner { self } fn map( inner: >::Result, mut operation: O, ) -> Self::Result where O: FnMut(T2) -> T1, { operation(inner) } }