summaryrefslogtreecommitdiffstats
path: root/src/minusplus.rs
diff options
context:
space:
mode:
authorThomas Otto <th1000s@posteo.net>2021-09-28 20:47:11 +0200
committerThomas Otto <th1000s@posteo.net>2021-10-16 14:07:30 +0200
commita30271a09ec00b518160b20552d7ecf9595afd6e (patch)
treec9df0441a4daa8712dcaac9f0b3e899da63e1397 /src/minusplus.rs
parentdbde169a28032a501f54410ca840c9981871e007 (diff)
Change PlusMinus to the correct MinusPlus, add documentation
Diffstat (limited to 'src/minusplus.rs')
-rw-r--r--src/minusplus.rs51
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(),
+ }
+ }
+}