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}