async_flow/io/
port_event.rs1#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6#[cfg_attr(feature = "serde", serde(rename_all = "lowercase"))]
7pub enum PortEvent<T> {
8 Connect,
9 Message(T),
10 Disconnect,
11}
12
13impl<T> PortEvent<T> {
14 pub fn message(&self) -> Option<&T> {
15 match self {
16 Self::Message(message) => Some(message),
17 _ => None,
18 }
19 }
20
21 pub fn into_message(self) -> Option<T> {
22 match self {
23 Self::Message(message) => Some(message),
24 _ => None,
25 }
26 }
27
28 pub fn is_connect(&self) -> bool {
30 matches!(self, Self::Connect)
31 }
32
33 pub fn is_message(&self) -> bool {
35 matches!(self, Self::Message(_))
36 }
37
38 pub fn is_disconnect(&self) -> bool {
40 matches!(self, Self::Disconnect)
41 }
42
43 pub fn as_str(&self) -> &str {
44 match self {
45 Self::Connect => "connect",
46 Self::Message(_) => "message",
47 Self::Disconnect => "disconnect",
48 }
49 }
50}
51
52impl<T> AsRef<str> for PortEvent<T> {
53 fn as_ref(&self) -> &str {
54 self.as_str()
55 }
56}