use crate::{ traversals::{TraversalOver, TraversalTraverse}, Optics, OpticsTrait, }; #[derive(Clone, Copy)] pub struct BothInner; #[allow(non_upper_case_globals)] pub const both: Optics = Optics(BothInner); impl OpticsTrait for BothInner {} impl TraversalTraverse<(T, T)> for BothInner { type Field = T; fn traverse(&self, (a, b): (T, T)) -> Vec { vec![a, b] } } impl TraversalOver<(T, T)> for BothInner { fn over(&self, (a, b): (T, T), mut f: F) -> (T, T) where F: FnMut(Self::Field) -> Self::Field, { (f(a), f(b)) } }