Skip to main content

SequentialFold

Struct SequentialFold 

Source
pub struct SequentialFold<L, S1, S2, F1, F2, M>
where F1: Fold<L, S1>, F2: Fold<L, S2>, M: Fn(&S1, &FoldContext) -> FoldContext,
{ /* private fields */ }
Expand description

Sequential fold — run one fold, then use its output to inform another.

§Type Compatibility Invariant

Both F1 and F2 must accept the same entry type L. The state types S1 and S2 are independent. The context_mapper is the only bridge between the two folds.

Implementations§

Source§

impl<L, S1, S2, F1, F2, M> SequentialFold<L, S1, S2, F1, F2, M>
where F1: Fold<L, S1>, F2: Fold<L, S2>, M: Fn(&S1, &FoldContext) -> FoldContext,

Source

pub fn new(first: F1, second: F2, context_mapper: M) -> Self

Create a sequential fold.

Source

pub fn execute<'a, I>( &self, entries: I, context: &FoldContext, ) -> (FoldOutcome<S1>, FoldOutcome<S2>)
where I: IntoIterator<Item = &'a L> + Clone, L: 'a,

Execute the sequential fold.

Auto Trait Implementations§

§

impl<L, S1, S2, F1, F2, M> Freeze for SequentialFold<L, S1, S2, F1, F2, M>
where F1: Freeze, F2: Freeze, M: Freeze,

§

impl<L, S1, S2, F1, F2, M> RefUnwindSafe for SequentialFold<L, S1, S2, F1, F2, M>

§

impl<L, S1, S2, F1, F2, M> Send for SequentialFold<L, S1, S2, F1, F2, M>
where F1: Send, F2: Send, M: Send, L: Send, S1: Send, S2: Send,

§

impl<L, S1, S2, F1, F2, M> Sync for SequentialFold<L, S1, S2, F1, F2, M>
where F1: Sync, F2: Sync, M: Sync, L: Sync, S1: Sync, S2: Sync,

§

impl<L, S1, S2, F1, F2, M> Unpin for SequentialFold<L, S1, S2, F1, F2, M>
where F1: Unpin, F2: Unpin, M: Unpin, L: Unpin, S1: Unpin, S2: Unpin,

§

impl<L, S1, S2, F1, F2, M> UnsafeUnpin for SequentialFold<L, S1, S2, F1, F2, M>
where F1: UnsafeUnpin, F2: UnsafeUnpin, M: UnsafeUnpin,

§

impl<L, S1, S2, F1, F2, M> UnwindSafe for SequentialFold<L, S1, S2, F1, F2, M>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.