async_backplane/
watched.rs1use core::fmt::Debug;
2use crate::Message;
3
4#[derive(Debug)]
6pub enum Watched<T: Debug> {
7 Completed(T),
9 Messaged(Message),
11}
12
13use Watched::{Completed, Messaged};
14
15impl<T: Debug> Watched<T> {
16
17 pub fn is_completed(&self) -> bool { matches!(self, Completed(_)) }
19
20 pub fn is_messaged(&self) -> bool { matches!(self, Messaged(_)) }
22
23 pub fn unwrap_completed(self) -> T {
25 if let Completed(c) = self { c }
26 else { panic!("Watched is not Completed"); }
27 }
28
29 pub fn unwrap_messaged(self) -> Message {
31 if let Messaged(m) = self { m }
32 else { panic!("Watched is not Messaged"); }
33 }
34}
35
36impl<T: Debug + PartialEq> PartialEq for Watched<T> {
37 fn eq(&self, other: &Self) -> bool {
38 match (self, other) {
39 (Completed(l), Completed(r)) => *l == *r,
40 (Messaged(l), Messaged(r)) => *l == *r,
41 _ => false,
42 }
43 }
44}
45
46impl<T: Debug + Eq> Eq for Watched<T> {}