1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet, VecDeque};
use std::hash::Hash;
pub trait Observe<T> {
fn update(&mut self, item: T);
}
impl<T> Observe<T> for Vec<T> {
fn update(&mut self, item: T) {
self.push(item);
}
}
impl<T> Observe<T> for VecDeque<T> {
fn update(&mut self, item: T) {
self.push_back(item);
}
}
impl<K: Eq + Hash, V> Observe<(K, V)> for HashMap<K, V> {
fn update(&mut self, item: (K, V)) {
let (k, v) = item;
self.insert(k, v);
}
}
impl<T: Eq + Hash> Observe<T> for HashSet<T> {
fn update(&mut self, item: T) {
self.insert(item);
}
}
impl<K: Eq + Ord, V> Observe<(K, V)> for BTreeMap<K, V> {
fn update(&mut self, item: (K, V)) {
let (k, v) = item;
self.insert(k, v);
}
}
impl<T: Eq + Ord> Observe<T> for BTreeSet<T> {
fn update(&mut self, item: T) {
self.insert(item);
}
}
impl Observe<char> for String {
fn update(&mut self, item: char) {
self.push(item);
}
}
impl Observe<&str> for String {
fn update(&mut self, item: &str) {
self.push_str(item);
}
}