async_backplane/
watched.rs

1use core::fmt::Debug;
2use crate::Message;
3
4/// A result from `watch()`.
5#[derive(Debug)]
6pub enum Watched<T: Debug> {
7    /// The provided Future completed.
8    Completed(T),
9    /// A message was received.
10    Messaged(Message),
11}
12
13use Watched::{Completed, Messaged};
14
15impl<T: Debug> Watched<T> {
16
17    /// True if the future completed.
18    pub fn is_completed(&self) -> bool { matches!(self, Completed(_)) }
19
20    /// True if we received a message.
21    pub fn is_messaged(&self) -> bool { matches!(self, Messaged(_)) }
22
23    /// Take the completed result or panic.
24    pub fn unwrap_completed(self) -> T {
25        if let Completed(c) = self { c }
26        else { panic!("Watched is not Completed"); }
27    }
28
29    /// Take the received message or panic.
30    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> {}