keepops 0.0.2

Extension traits for keeping the input of mapping functions
Documentation
use crate::tuple_family::{RunTuple, TupleFamily};

pub trait KeepMapTuple<A, ExtraDim>
where
    A: TupleFamily<ExtraDim>,
{
    type SelfType<T>;
    fn keep_tuple_map<F>(self, f: F) -> Self::SelfType<RunTuple<A, ExtraDim>>
    where
        F: FnOnce(&A) -> ExtraDim;
}

impl<Tuple, ExtraDim> KeepMapTuple<Tuple, ExtraDim> for Option<Tuple>
where
    Tuple: TupleFamily<ExtraDim>,
{
    type SelfType<T> = Option<T>;
    fn keep_tuple_map<F>(self, f: F) -> Self::SelfType<RunTuple<Tuple, ExtraDim>>
    where
        F: FnOnce(&Tuple) -> ExtraDim,
    {
        self.map(|tuple| {
            let extra_dim = f(&tuple);
            tuple.append_to_tuple(extra_dim)
        })
    }
}

impl<Tuple, ExtraDim, ErrorType> KeepMapTuple<Tuple, ExtraDim> for Result<Tuple, ErrorType>
where
    Tuple: TupleFamily<ExtraDim>,
{
    type SelfType<T> = Result<T, ErrorType>;
    fn keep_tuple_map<F>(self, f: F) -> Self::SelfType<RunTuple<Tuple, ExtraDim>>
    where
        F: FnOnce(&Tuple) -> ExtraDim,
    {
        self.map(|tuple| {
            let extra_dim = f(&tuple);
            tuple.append_to_tuple(extra_dim)
        })
    }
}