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
use core::fmt::Debug;
use crate::Message;
#[derive(Debug)]
pub enum Watched<T: Debug> {
Completed(T),
Messaged(Message),
}
use Watched::{Completed, Messaged};
impl<T: Debug> Watched<T> {
pub fn is_completed(&self) -> bool {
if let Messaged(_) = self { true } else { false }
}
pub fn is_messaged(&self) -> bool {
if let Messaged(_) = self { true } else { false }
}
pub fn unwrap_completed(self) -> T {
if let Completed(c) = self { c }
else { panic!("Watched is not Completed"); }
}
pub fn unwrap_messaged(self) -> Message {
if let Messaged(m) = self { m }
else { panic!("Watched is not Messaged"); }
}
}
impl<T: Debug + PartialEq> PartialEq for Watched<T> {
fn eq(&self, other: &Self) -> bool {
match (self, other) {
(Completed(l), Completed(r)) => *l == *r,
(Messaged(l), Messaged(r)) => *l == *r,
_ => false,
}
}
}
impl<T: Debug + Eq> Eq for Watched<T> {}