diff options
author | Thomas Otto <th1000s@posteo.net> | 2021-09-28 20:47:11 +0200 |
---|---|---|
committer | Thomas Otto <th1000s@posteo.net> | 2021-10-16 14:07:30 +0200 |
commit | a30271a09ec00b518160b20552d7ecf9595afd6e (patch) | |
tree | c9df0441a4daa8712dcaac9f0b3e899da63e1397 /src/minusplus.rs | |
parent | dbde169a28032a501f54410ca840c9981871e007 (diff) |
Change PlusMinus to the correct MinusPlus, add documentation
Diffstat (limited to 'src/minusplus.rs')
-rw-r--r-- | src/minusplus.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/minusplus.rs b/src/minusplus.rs new file mode 100644 index 00000000..e37c801c --- /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<T> { + pub minus: T, + pub plus: T, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum MinusPlusIndex { + Minus, + Plus, +} + +pub use MinusPlusIndex::*; + +impl<T> Index<MinusPlusIndex> for MinusPlus<T> { + type Output = T; + fn index(&self, side: MinusPlusIndex) -> &Self::Output { + match side { + Minus => &self.minus, + Plus => &self.plus, + } + } +} + +impl<T> IndexMut<MinusPlusIndex> for MinusPlus<T> { + fn index_mut(&mut self, side: MinusPlusIndex) -> &mut Self::Output { + match side { + Minus => &mut self.minus, + Plus => &mut self.plus, + } + } +} + +impl<T> MinusPlus<T> { + pub fn new(minus: T, plus: T) -> Self { + MinusPlus { minus, plus } + } +} + +impl<T: Default> Default for MinusPlus<T> { + fn default() -> Self { + Self { + minus: T::default(), + plus: T::default(), + } + } +} |