moq_transport/message/
subscribe_namespace.rs1use crate::coding::{Decode, DecodeError, Encode, EncodeError, KeyValuePairs, TrackNamespace};
2
3#[derive(Clone, Debug, Eq, PartialEq)]
5pub struct SubscribeNamespace {
6 pub id: u64,
8
9 pub track_namespace_prefix: TrackNamespace,
11
12 pub params: KeyValuePairs,
14}
15
16impl Decode for SubscribeNamespace {
17 fn decode<R: bytes::Buf>(r: &mut R) -> Result<Self, DecodeError> {
18 let id = u64::decode(r)?;
19 let track_namespace_prefix = TrackNamespace::decode(r)?;
20 let params = KeyValuePairs::decode(r)?;
21
22 Ok(Self {
23 id,
24 track_namespace_prefix,
25 params,
26 })
27 }
28}
29
30impl Encode for SubscribeNamespace {
31 fn encode<W: bytes::BufMut>(&self, w: &mut W) -> Result<(), EncodeError> {
32 self.id.encode(w)?;
33 self.track_namespace_prefix.encode(w)?;
34 self.params.encode(w)?;
35
36 Ok(())
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43 use bytes::BytesMut;
44
45 #[test]
46 fn encode_decode() {
47 let mut buf = BytesMut::new();
48
49 let mut kvps = KeyValuePairs::new();
51 kvps.set_bytesvalue(123, vec![0x00, 0x01, 0x02, 0x03]);
52
53 let msg = SubscribeNamespace {
54 id: 12345,
55 track_namespace_prefix: TrackNamespace::from_utf8_path("path/prefix"),
56 params: kvps,
57 };
58 msg.encode(&mut buf).unwrap();
59 let decoded = SubscribeNamespace::decode(&mut buf).unwrap();
60 assert_eq!(decoded, msg);
61 }
62}