use std::marker::PhantomData;
#[derive(Debug, Clone, Copy)]
pub struct ResultTapStep<InputOk, InputErr, OutputOk, OutputErr, TapFn>
where
TapFn: Fn(Result<InputOk, InputErr>) -> Result<OutputOk, OutputErr>,
{
tap: TapFn,
_phantom: PhantomData<(InputOk, InputErr, OutputOk, OutputErr)>,
}
impl<InputOk, InputErr, OutputOk, OutputErr, TapFn>
ResultTapStep<InputOk, InputErr, OutputOk, OutputErr, TapFn>
where
TapFn: Fn(Result<InputOk, InputErr>) -> Result<OutputOk, OutputErr>,
{
pub const fn new(tap: TapFn) -> Self {
Self {
tap,
_phantom: PhantomData,
}
}
pub(crate) fn apply(
&self,
input_result: Result<InputOk, InputErr>,
) -> Result<OutputOk, OutputErr> {
(self.tap)(input_result)
}
}