moq_lite/ietf/
subscribe_namespace.rs

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