1pub trait VecExtensions<T> {
2 fn push_if_empty(self, value: T) -> Self;
4
5 fn swap_insert(&mut self, index: usize, value: T);
7
8 fn merge(self, other: Self) -> Self;
11}
12
13impl<T> VecExtensions<T> for Vec<T> {
14 fn push_if_empty(mut self, value: T) -> Self {
15 if self.is_empty() {
16 self.push(value);
17 }
18 self
19 }
20
21 fn swap_insert(&mut self, index: usize, value: T) {
22 self.push(value);
23 let loc = self.len() - 1;
24 self.swap(index, loc);
25 }
26
27 fn merge(mut self, mut other: Self) -> Self {
28 self.append(&mut other);
29 self
30 }
31}