1use std::borrow::Cow;
4
5use crate::{coding::*, Path};
6
7use super::util::{decode_namespace, encode_namespace};
8
9#[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#[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}