moq_transport/message/
publish_done.rs1use crate::coding::{Decode, DecodeError, Encode, EncodeError, ReasonPhrase};
2
3#[derive(Clone, Debug, Eq, PartialEq)]
7pub struct PublishDone {
8 pub id: u64,
10
11 pub status_code: u64,
13
14 pub stream_count: u64,
16
17 pub reason: ReasonPhrase,
19}
20
21impl Decode for PublishDone {
22 fn decode<R: bytes::Buf>(r: &mut R) -> Result<Self, DecodeError> {
23 let id = u64::decode(r)?;
24 let status_code = u64::decode(r)?;
25 let stream_count = u64::decode(r)?;
26 let reason = ReasonPhrase::decode(r)?;
27
28 Ok(Self {
29 id,
30 status_code,
31 stream_count,
32 reason,
33 })
34 }
35}
36
37impl Encode for PublishDone {
38 fn encode<W: bytes::BufMut>(&self, w: &mut W) -> Result<(), EncodeError> {
39 self.id.encode(w)?;
40 self.status_code.encode(w)?;
41 self.stream_count.encode(w)?;
42 self.reason.encode(w)?;
43
44 Ok(())
45 }
46}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51 use bytes::BytesMut;
52
53 #[test]
54 fn encode_decode() {
55 let mut buf = BytesMut::new();
56
57 let msg = PublishDone {
58 id: 12345,
59 status_code: 0x02,
60 stream_count: 2,
61 reason: ReasonPhrase("Track Ended".to_string()),
62 };
63 msg.encode(&mut buf).unwrap();
64 let decoded = PublishDone::decode(&mut buf).unwrap();
65 assert_eq!(decoded, msg);
66 }
67}