sheave_core/messages/
window_acknowledgement_size.rsuse std::{
cmp::Ordering,
io::Result as IOResult,
ops::Div
};
use crate::{
ByteBuffer,
Decoder,
Encoder,
messages::{
Channel,
ChunkData,
headers::MessageType
}
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub struct WindowAcknowledgementSize(u32);
impl WindowAcknowledgementSize {
const DEFAULT: u32 = 2500000;
pub fn new(window_acknowledgement_size: u32) -> Self {
Self(window_acknowledgement_size)
}
pub fn get_inner(&self) -> u32 {
self.0
}
}
impl Default for WindowAcknowledgementSize {
fn default() -> Self {
Self(Self::DEFAULT)
}
}
impl PartialEq<u32> for WindowAcknowledgementSize {
fn eq(&self, other: &u32) -> bool {
self.0.eq(other)
}
}
impl PartialEq<WindowAcknowledgementSize> for u32 {
fn eq(&self, other: &WindowAcknowledgementSize) -> bool {
self.eq(&other.0)
}
}
impl PartialOrd<u32> for WindowAcknowledgementSize {
fn partial_cmp(&self, other: &u32) -> Option<Ordering> {
self.0.partial_cmp(other)
}
}
impl PartialOrd<WindowAcknowledgementSize> for u32 {
fn partial_cmp(&self, other: &WindowAcknowledgementSize) -> Option<Ordering> {
self.partial_cmp(&other.0)
}
}
impl Div<u32> for WindowAcknowledgementSize {
type Output = Self;
fn div(self, rhs: u32) -> Self::Output {
Self(self.0 / rhs)
}
}
impl ChunkData for WindowAcknowledgementSize {
const CHANNEL: Channel = Channel::Network;
const MESSAGE_TYPE: MessageType = MessageType::WindowAcknowledgementSize;
}
impl Decoder<WindowAcknowledgementSize> for ByteBuffer {
fn decode(&mut self) -> IOResult<WindowAcknowledgementSize> {
self.get_u32_be().map(WindowAcknowledgementSize::new)
}
}
impl Encoder<WindowAcknowledgementSize> for ByteBuffer {
fn encode(&mut self, window_acknowledgement_size: &WindowAcknowledgementSize) {
self.put_u32_be(window_acknowledgement_size.0);
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn decode_window_acknowledgement_size() {
let mut buffer = ByteBuffer::default();
buffer.put_u32_be(2500000);
let result: IOResult<WindowAcknowledgementSize> = buffer.decode();
assert!(result.is_ok());
let actual = result.unwrap();
let expected = WindowAcknowledgementSize::default();
assert_eq!(expected, actual)
}
#[test]
fn encode_window_acknowledgement_size() {
let mut buffer = ByteBuffer::default();
let expected_bytes = 2500000u32;
buffer.encode(&WindowAcknowledgementSize::default());
let actual_bytes = buffer.get_u32_be().unwrap();
assert_eq!(expected_bytes, actual_bytes)
}
}