moq_lite/ietf/
subscribe_announces.rs

1//! IETF moq-transport-07 subscribe announces messages
2
3use std::borrow::Cow;
4
5use crate::{coding::*, Path};
6
7use super::util::{decode_namespace, encode_namespace};
8
9/// SubscribeAnnounces message (0x11)
10#[derive(Clone, Debug)]
11pub struct SubscribeAnnounces<'a> {
12	pub namespace: Path<'a>,
13}
14
15impl<'a> Message for SubscribeAnnounces<'a> {
16	fn encode<W: bytes::BufMut>(&self, w: &mut W) {
17		encode_namespace(w, &self.namespace);
18		0u8.encode(w); // no parameters
19	}
20
21	fn decode<R: bytes::Buf>(r: &mut R) -> Result<Self, DecodeError> {
22		let namespace = decode_namespace(r)?;
23
24		let num_params = u8::decode(r)?;
25		if num_params != 0 {
26			return Err(DecodeError::InvalidValue);
27		}
28
29		Ok(Self { namespace })
30	}
31}
32
33/// SubscribeAnnouncesOk message (0x12)
34#[derive(Clone, Debug)]
35pub struct SubscribeAnnouncesOk<'a> {
36	pub namespace: Path<'a>,
37}
38
39impl<'a> Message for SubscribeAnnouncesOk<'a> {
40	fn encode<W: bytes::BufMut>(&self, w: &mut W) {
41		encode_namespace(w, &self.namespace);
42	}
43
44	fn decode<R: bytes::Buf>(r: &mut R) -> Result<Self, DecodeError> {
45		let namespace = decode_namespace(r)?;
46		Ok(Self { namespace })
47	}
48}
49
50/// SubscribeAnnouncesError message (0x13)
51#[derive(Clone, Debug)]
52pub struct SubscribeAnnouncesError<'a> {
53	pub namespace: Path<'a>,
54	pub error_code: u64,
55	pub reason_phrase: Cow<'a, str>,
56}
57
58impl<'a> Message for SubscribeAnnouncesError<'a> {
59	fn encode<W: bytes::BufMut>(&self, w: &mut W) {
60		encode_namespace(w, &self.namespace);
61		self.error_code.encode(w);
62		self.reason_phrase.encode(w);
63	}
64
65	fn decode<R: bytes::Buf>(r: &mut R) -> Result<Self, DecodeError> {
66		let namespace = decode_namespace(r)?;
67		let error_code = u64::decode(r)?;
68		let reason_phrase = Cow::<str>::decode(r)?;
69
70		Ok(Self {
71			namespace,
72			error_code,
73			reason_phrase,
74		})
75	}
76}
77
78/// UnsubscribeAnnounces message (0x14)
79#[derive(Clone, Debug)]
80pub struct UnsubscribeAnnounces<'a> {
81	pub namespace: Path<'a>,
82}
83
84impl<'a> Message for UnsubscribeAnnounces<'a> {
85	fn encode<W: bytes::BufMut>(&self, w: &mut W) {
86		encode_namespace(w, &self.namespace);
87	}
88
89	fn decode<R: bytes::Buf>(r: &mut R) -> Result<Self, DecodeError> {
90		let namespace = decode_namespace(r)?;
91		Ok(Self { namespace })
92	}
93}