Skip to main content

moq_transport/message/
publisher.rs

1use crate::message::{self, Message};
2use std::fmt;
3
4macro_rules! publisher_msgs {
5    {$($name:ident,)*} => {
6		#[derive(Clone)]
7		pub enum Publisher {
8			$($name(message::$name)),*
9		}
10
11		$(impl From<message::$name> for Publisher {
12			fn from(msg: message::$name) -> Self {
13				Publisher::$name(msg)
14			}
15		})*
16
17		impl From<Publisher> for Message {
18			fn from(p: Publisher) -> Self {
19				match p {
20					$(Publisher::$name(m) => Message::$name(m),)*
21				}
22			}
23		}
24
25		impl TryFrom<Message> for Publisher {
26			type Error = Message;
27
28			fn try_from(m: Message) -> Result<Self, Self::Error> {
29				match m {
30					$(Message::$name(m) => Ok(Publisher::$name(m)),)*
31					_ => Err(m),
32				}
33			}
34		}
35
36		impl fmt::Debug for Publisher {
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 PUBLISHER would send, or that a SUBSCRIBER would handle
48publisher_msgs! {
49    PublishNamespace,
50    PublishNamespaceDone,
51    Publish,
52    PublishDone,
53    SubscribeOk,
54    SubscribeError,
55    TrackStatusOk,
56    TrackStatusError,
57    FetchOk,
58    FetchError,
59    SubscribeNamespaceOk,
60    SubscribeNamespaceError,
61}