moq_lite/ietf/
request.rs

1use crate::{
2	coding::{Decode, DecodeError, Encode},
3	ietf::{Message, Version},
4};
5
6#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
7pub struct RequestId(pub u64);
8
9impl RequestId {
10	pub fn increment(&mut self) -> RequestId {
11		let prev = self.0;
12		self.0 += 2;
13		RequestId(prev)
14	}
15}
16
17impl std::fmt::Display for RequestId {
18	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
19		write!(f, "{}", self.0)
20	}
21}
22
23impl<V> Encode<V> for RequestId {
24	fn encode<W: bytes::BufMut>(&self, w: &mut W, version: V) {
25		self.0.encode(w, version);
26	}
27}
28
29impl<V> Decode<V> for RequestId {
30	fn decode<R: bytes::Buf>(r: &mut R, version: V) -> Result<Self, DecodeError> {
31		let request_id = u64::decode(r, version)?;
32		Ok(Self(request_id))
33	}
34}
35
36#[derive(Clone, Debug)]
37pub struct MaxRequestId {
38	pub request_id: RequestId,
39}
40
41impl Message for MaxRequestId {
42	const ID: u64 = 0x15;
43
44	fn encode_msg<W: bytes::BufMut>(&self, w: &mut W, version: Version) {
45		self.request_id.encode(w, version);
46	}
47
48	fn decode_msg<R: bytes::Buf>(r: &mut R, version: Version) -> Result<Self, DecodeError> {
49		let request_id = RequestId::decode(r, version)?;
50		Ok(Self { request_id })
51	}
52}
53
54#[derive(Clone, Debug)]
55pub struct RequestsBlocked {
56	pub request_id: RequestId,
57}
58
59impl Message for RequestsBlocked {
60	const ID: u64 = 0x1a;
61
62	fn encode_msg<W: bytes::BufMut>(&self, w: &mut W, version: Version) {
63		self.request_id.encode(w, version);
64	}
65
66	fn decode_msg<R: bytes::Buf>(r: &mut R, version: Version) -> Result<Self, DecodeError> {
67		let request_id = RequestId::decode(r, version)?;
68		Ok(Self { request_id })
69	}
70}