moq_transfork/message/
group.rs

1use crate::coding::*;
2
3#[derive(Clone, Debug)]
4pub struct Group {
5	// The subscribe ID.
6	pub subscribe: u64,
7
8	// The group sequence number
9	pub sequence: u64,
10}
11
12impl Decode for Group {
13	fn decode<R: bytes::Buf>(r: &mut R) -> Result<Self, DecodeError> {
14		Ok(Self {
15			subscribe: u64::decode(r)?,
16			sequence: u64::decode(r)?,
17		})
18	}
19}
20
21impl Encode for Group {
22	fn encode<W: bytes::BufMut>(&self, w: &mut W) {
23		self.subscribe.encode(w);
24		self.sequence.encode(w);
25	}
26}
27
28/// Indicates if groups should be delivered in ascending or descending order.
29#[derive(Clone, Debug, Copy, PartialEq, Eq)]
30pub enum GroupOrder {
31	Asc,
32	Desc,
33}
34
35impl Decode for GroupOrder {
36	fn decode<R: bytes::Buf>(r: &mut R) -> Result<Self, DecodeError> {
37		match u64::decode(r)? {
38			0 => Ok(Self::Asc),
39			1 => Ok(Self::Desc),
40			_ => Err(DecodeError::InvalidValue),
41		}
42	}
43}
44
45impl Encode for GroupOrder {
46	fn encode<W: bytes::BufMut>(&self, w: &mut W) {
47		let v: u64 = match self {
48			Self::Asc => 0,
49			Self::Desc => 1,
50		};
51		v.encode(w)
52	}
53}
54
55#[derive(Clone, Debug)]
56pub struct GroupDrop {
57	pub sequence: u64,
58	pub count: u64,
59	pub code: u32,
60}
61
62impl Encode for GroupDrop {
63	fn encode<W: bytes::BufMut>(&self, w: &mut W) {
64		self.sequence.encode(w);
65		self.count.encode(w);
66		self.code.encode(w);
67	}
68}
69
70impl Decode for GroupDrop {
71	fn decode<R: bytes::Buf>(r: &mut R) -> Result<Self, DecodeError> {
72		Ok(Self {
73			sequence: u64::decode(r)?,
74			count: u64::decode(r)?,
75			code: u32::decode(r)?,
76		})
77	}
78}