use std::ops::{Index, IndexMut}; /// Represent data related to removed/minus and added/plus lines which /// can be indexed with [`MinusPlusIndex::{Plus`](MinusPlusIndex::Plus)`,`[`Minus}`](MinusPlusIndex::Minus). #[derive(Debug, Clone, PartialEq, Eq)] pub struct MinusPlus { pub minus: T, pub plus: T, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum MinusPlusIndex { Minus, Plus, } pub use MinusPlusIndex::*; impl Index for MinusPlus { type Output = T; fn index(&self, side: MinusPlusIndex) -> &Self::Output { match side { Minus => &self.minus, Plus => &self.plus, } } } impl IndexMut for MinusPlus { fn index_mut(&mut self, side: MinusPlusIndex) -> &mut Self::Output { match side { Minus => &mut self.minus, Plus => &mut self.plus, } } } impl MinusPlus { pub fn new(minus: T, plus: T) -> Self { MinusPlus { minus, plus } } } impl Default for MinusPlus { fn default() -> Self { Self { minus: T::default(), plus: T::default(), } } }