sheave_core/messages/
acknowledgement.rs1use std::io::Result as IOResult;
2use crate::{
3 ByteBuffer,
4 Decoder,
5 Encoder,
6 messages::{
7 Channel,
8 ChunkData,
9 headers::MessageType
10 }
11};
12
13#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord)]
16pub struct Acknowledgement(u32);
17
18impl Acknowledgement {
19 pub fn new(acknowledgement: u32) -> Self {
21 Self(acknowledgement)
22 }
23
24 pub fn get_inner(&self) -> u32 {
26 self.0
27 }
28}
29
30impl PartialEq<u32> for Acknowledgement {
31 fn eq(&self, other: &u32) -> bool {
32 self.0.eq(other)
33 }
34}
35
36impl PartialEq<Acknowledgement> for u32 {
37 fn eq(&self, other: &Acknowledgement) -> bool {
38 self.eq(&other.0)
39 }
40}
41
42impl ChunkData for Acknowledgement {
43 const CHANNEL: Channel = Channel::Network;
44 const MESSAGE_TYPE: MessageType = MessageType::Acknowledgement;
45}
46
47impl Decoder<Acknowledgement> for ByteBuffer {
48 fn decode(&mut self) -> IOResult<Acknowledgement> {
74 self.get_u32_be().map(Acknowledgement::new)
75 }
76}
77
78impl Encoder<Acknowledgement> for ByteBuffer {
79 fn encode(&mut self, acknowledgement: &Acknowledgement) {
81 self.put_u32_be(acknowledgement.get_inner());
82 }
83}
84
85#[cfg(test)]
86mod tests {
87 use super::*;
88
89 #[test]
90 fn decode_acknowledgement() {
91 let mut buffer = ByteBuffer::default();
92 buffer.put_u32_be(u32::default());
93 let result: IOResult<Acknowledgement> = buffer.decode();
94 assert!(result.is_ok());
95 let actual = result.unwrap();
96 let expected = Acknowledgement::default();
97 assert_eq!(expected, actual)
98 }
99
100 #[test]
101 fn encode_acknowledgement() {
102 let mut buffer = ByteBuffer::default();
103 let expected_bytes = u32::default();
104 buffer.encode(&Acknowledgement::default());
105 let actual_bytes = buffer.get_u32_be().unwrap();
106 assert_eq!(expected_bytes, actual_bytes)
107 }
108}