Skip to main content

moq_transport/message/
subscriber.rs

1use crate::message::{self, Message};
2use std::fmt;
3
4macro_rules! subscriber_msgs {
5    {$($name:ident,)*} => {
6		#[derive(Clone)]
7		pub enum Subscriber {
8			$($name(message::$name)),*
9		}
10
11		$(impl From<message::$name> for Subscriber {
12			fn from(msg: message::$name) -> Self {
13				Subscriber::$name(msg)
14			}
15		})*
16
17		impl From<Subscriber> for Message {
18			fn from(p: Subscriber) -> Self {
19				match p {
20					$(Subscriber::$name(m) => Message::$name(m),)*
21				}
22			}
23		}
24
25		impl TryFrom<Message> for Subscriber {
26			type Error = Message;
27
28			fn try_from(m: Message) -> Result<Self, Self::Error> {
29				match m {
30					$(Message::$name(m) => Ok(Subscriber::$name(m)),)*
31					_ => Err(m),
32				}
33			}
34		}
35
36		impl fmt::Debug for Subscriber {
37			// Delegate to the message formatter
38			fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
39				match self {
40					$(Self::$name(ref m) => m.fmt(f),)*
41				}
42			}
43		}
44    }
45}
46
47// Defines messages that a SUBSCRIBER would send, or that a PUBLISHER would handle
48subscriber_msgs! {
49    Subscribe,
50    SubscribeUpdate,
51    Unsubscribe,
52    Fetch,
53    FetchCancel,
54    TrackStatus,
55    SubscribeNamespace,
56    UnsubscribeNamespace,
57    PublishNamespaceCancel,
58    PublishNamespaceOk,
59    PublishNamespaceError,
60    PublishOk,
61    PublishError,
62}