diff --git a/dist_text/src/text.rs b/dist_text/src/text.rs index e850594..c2c14bd 100644 --- a/dist_text/src/text.rs +++ b/dist_text/src/text.rs @@ -1,6 +1,6 @@ -use std::fmt::{Display, Formatter}; -use crdts::{CmRDT, List}; use crdts::list::Op; +use crdts::{CmRDT, List}; +use std::fmt::{Display, Formatter}; #[derive(Clone)] pub struct Text { @@ -9,9 +9,7 @@ pub struct Text { impl Default for Text { fn default() -> Self { - Self { - inner: List::new() - } + Self { inner: List::new() } } } @@ -25,14 +23,26 @@ impl Display for Text { impl Text { pub fn apply_ops(&mut self, ops: Vec>) { - ops.iter().for_each(move |op| self.inner.apply(op.to_owned())); + ops.iter() + .for_each(move |op| self.inner.apply(op.to_owned())); } - pub fn insert_linebreak(&mut self, start: usize, end: usize, src: &str) -> Vec> { + pub fn insert_linebreak( + &mut self, + start: usize, + end: usize, + src: &str, + ) -> Vec> { self.insert(start, end, "\n", src) } - pub fn insert(&mut self, start: usize, end: usize, data: &str, src: &str) -> Vec> { + pub fn insert( + &mut self, + start: usize, + end: usize, + data: &str, + src: &str, + ) -> Vec> { let mut ops: Vec> = Vec::new(); if start < end { @@ -55,14 +65,22 @@ impl Text { } pub fn delete_backward(&mut self, start: usize, end: usize, src: &str) -> Vec> { - if (start == 0 && start == end) || end > self.inner.len() { return Vec::new(); } + if (start == 0 && start == end) || end > self.inner.len() { + return Vec::new(); + } - let (end, start) = if start == end { (start, start - 1) } else { (end, start) }; + let (end, start) = if start == end { + (start, start - 1) + } else { + (end, start) + }; self.delete(start, end, src) } pub fn delete_forward(&mut self, start: usize, end: usize, src: &str) -> Vec> { - if start >= self.inner.len() { return Vec::new(); } + if start >= self.inner.len() { + return Vec::new(); + } let end = if start == end { start + 1 } else { end }; self.delete(start, end, src) @@ -104,7 +122,7 @@ mod tests { #[test] fn insert_delete() { - let mut t = Text::new(); + let mut t = Text::default(); t.insert(0, 0, "Hello", "A"); t.insert(5, 5, "world!", "A"); t.insert(5, 5, ", ", "B"); @@ -121,7 +139,7 @@ mod tests { #[test] fn backspace() { - let mut t = Text::new(); + let mut t = Text::default(); t.insert(0, 0, "Hello", "A"); t.delete_backward(5, 5, "A"); @@ -133,7 +151,7 @@ mod tests { #[test] fn delete() { - let mut t = Text::new(); + let mut t = Text::default(); t.insert(0, 0, "Hello", "A"); t.delete_forward(4, 4, "A"); @@ -145,7 +163,7 @@ mod tests { #[test] fn linebreak() { - let mut t = Text::new(); + let mut t = Text::default(); t.insert(0, 0, "Hello, world!", "A"); t.insert_linebreak(6, 6, "A"); @@ -159,21 +177,20 @@ mod tests { #[test] fn apply_ops() { - let mut t_a = Text::new(); + let mut t_a = Text::default(); let ops_a = t_a.insert(0, 0, "Hello, world!", "A"); - let mut t_b = Text::new(); + let mut t_b = Text::default(); t_b.apply_ops(ops_a); assert_eq!(t_b.to_string(), "Hello, world!"); - let ops_a = t_a.insert(7,7, "distributed ", "A"); + let ops_a = t_a.insert(7, 7, "distributed ", "A"); t_b.apply_ops(ops_a); - let ops_b = t_b.insert(7,7, "cruel ", "B"); + let ops_b = t_b.insert(7, 7, "cruel ", "B"); t_a.apply_ops(ops_b); - assert_eq!(t_a.to_string(), "Hello, cruel distributed world!"); assert_eq!(t_b.to_string(), "Hello, cruel distributed world!"); }