moq_lite/ietf/
track.rs

1//! IETF moq-transport-07 track status messages
2
3use std::borrow::Cow;
4
5use crate::{coding::*, Path};
6
7use super::util::{decode_namespace, encode_namespace};
8
9/// TrackStatusRequest message (0x0d)
10#[derive(Clone, Debug)]
11pub struct TrackStatusRequest<'a> {
12	pub track_namespace: Path<'a>,
13	pub track_name: Cow<'a, str>,
14}
15
16impl<'a> Message for TrackStatusRequest<'a> {
17	fn encode<W: bytes::BufMut>(&self, w: &mut W) {
18		encode_namespace(w, &self.track_namespace);
19		self.track_name.encode(w);
20	}
21
22	fn decode<R: bytes::Buf>(r: &mut R) -> Result<Self, DecodeError> {
23		let track_namespace = decode_namespace(r)?;
24		let track_name = Cow::<str>::decode(r)?;
25
26		Ok(Self {
27			track_namespace,
28			track_name,
29		})
30	}
31}
32
33/// TrackStatus message (0x0e)
34/// Sent to communicate track-level state
35#[derive(Clone, Debug)]
36pub struct TrackStatus<'a> {
37	pub track_namespace: Path<'a>,
38	pub track_name: Cow<'a, str>,
39	pub status_code: u64,
40	pub last_group_id: u64,
41	pub last_object_id: u64,
42}
43
44impl<'a> TrackStatus<'a> {
45	pub const STATUS_IN_PROGRESS: u64 = 0x00;
46	pub const STATUS_NOT_FOUND: u64 = 0x01;
47	pub const STATUS_NOT_AUTHORIZED: u64 = 0x02;
48	pub const STATUS_ENDED: u64 = 0x03;
49}
50
51impl<'a> Message for TrackStatus<'a> {
52	fn encode<W: bytes::BufMut>(&self, w: &mut W) {
53		encode_namespace(w, &self.track_namespace);
54		self.track_name.encode(w);
55		self.status_code.encode(w);
56		self.last_group_id.encode(w);
57		self.last_object_id.encode(w);
58	}
59
60	fn decode<R: bytes::Buf>(r: &mut R) -> Result<Self, DecodeError> {
61		let track_namespace = decode_namespace(r)?;
62		let track_name = Cow::<str>::decode(r)?;
63		let status_code = u64::decode(r)?;
64		let last_group_id = u64::decode(r)?;
65		let last_object_id = u64::decode(r)?;
66
67		Ok(Self {
68			track_namespace,
69			track_name,
70			status_code,
71			last_group_id,
72			last_object_id,
73		})
74	}
75}