2021-11-11 13:29:43 +00:00
|
|
|
use crate::traversals::{Traversal, TraversalOver, TraversalTraverse};
|
2021-11-11 12:56:54 +00:00
|
|
|
|
|
|
|
#[derive(Clone, Copy)]
|
|
|
|
pub struct BothInner;
|
|
|
|
#[allow(non_upper_case_globals)]
|
2021-11-11 13:29:43 +00:00
|
|
|
pub const both: Traversal<BothInner> = Traversal(BothInner);
|
2021-11-11 12:56:54 +00:00
|
|
|
|
|
|
|
impl<T> TraversalTraverse<(T, T)> for BothInner {
|
|
|
|
type Field = T;
|
|
|
|
|
|
|
|
fn traverse(&self, (a, b): (T, T)) -> Vec<Self::Field> {
|
|
|
|
vec![a, b]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<T> TraversalOver<(T, T)> for BothInner {
|
|
|
|
fn over<F>(&self, (a, b): (T, T), mut f: F) -> (T, T)
|
|
|
|
where
|
|
|
|
F: FnMut(Self::Field) -> Self::Field,
|
|
|
|
{
|
|
|
|
(f(a), f(b))
|
|
|
|
}
|
|
|
|
}
|