From a30271a09ec00b518160b20552d7ecf9595afd6e Mon Sep 17 00:00:00 2001 From: Thomas Otto Date: Tue, 28 Sep 2021 20:47:11 +0200 Subject: Change PlusMinus to the correct MinusPlus, add documentation --- src/minusplus.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/minusplus.rs (limited to 'src/minusplus.rs') diff --git a/src/minusplus.rs b/src/minusplus.rs new file mode 100644 index 0000000..e37c801 --- /dev/null +++ b/src/minusplus.rs @@ -0,0 +1,51 @@ +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, 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(), + } + } +} -- cgit v1.2.3