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 {
25 self.0
26 }
27}
28
29impl PartialEq<u32> for Acknowledgement {
30 fn eq(&self, other: &u32) -> bool {
31 self.0.eq(other)
32 }
33}
34
35impl PartialEq<Acknowledgement> for u32 {
36 fn eq(&self, other: &Acknowledgement) -> bool {
37 self.eq(&other.0)
38 }
39}
40
41impl ChunkData for Acknowledgement {
42 const CHANNEL: Channel = Channel::Network;
43 const MESSAGE_TYPE: MessageType = MessageType::Acknowledgement;
44}
45
46impl Decoder<Acknowledgement> for ByteBuffer {
47 fn decode(&mut self) -> IOResult<Acknowledgement> {
73 self.get_u32_be().map(Acknowledgement::new)
74 }
75}
76
77impl Encoder<Acknowledgement> for ByteBuffer {
78 fn encode(&mut self, acknowledgement: &Acknowledgement) {
80 self.put_u32_be(acknowledgement.0);
81 }
82}
83
84#[cfg(test)]
85mod tests {
86 use super::*;
87
88 #[test]
89 fn decode_acknowledgement() {
90 let mut buffer = ByteBuffer::default();
91 buffer.put_u32_be(u32::default());
92 let result: IOResult<Acknowledgement> = buffer.decode();
93 assert!(result.is_ok());
94 let actual = result.unwrap();
95 let expected = Acknowledgement::default();
96 assert_eq!(expected, actual)
97 }
98
99 #[test]
100 fn encode_acknowledgement() {
101 let mut buffer = ByteBuffer::default();
102 let expected_bytes = u32::default();
103 buffer.encode(&Acknowledgement::default());
104 let actual_bytes = buffer.get_u32_be().unwrap();
105 assert_eq!(expected_bytes, actual_bytes)
106 }
107}