use std::convert::TryFrom;
pub const LEN_SIZE: usize = 5;
pub const CHANNEL_BUFFER_SIZE: usize = 256;
pub const DATA_READ_TIMEOUT: u64 = 1000;
pub const HANDSHAKE_TIMEOUT: u64 = 60000;
pub fn encode_message_size(size: usize) -> [u8; LEN_SIZE] {
(0..LEN_SIZE)
.fold((size, [0u8; LEN_SIZE]), |(size, mut encoded_size), i| {
encoded_size[LEN_SIZE - i - 1] = u8::try_from(size & 0xff).unwrap();
(size >> 8, encoded_size)
})
.1
}
#[allow(clippy::trivially_copy_pass_by_ref)]
pub fn decode_message_size(encoded_size: &[u8; LEN_SIZE]) -> usize {
encoded_size
.iter()
.fold(0, |acc, x| (acc << 8) + usize::from(*x))
}
macro_rules! unwrap_enum {
($enum:expr, $variant:path) => {{
if let $variant(x) = $enum {
x
} else {
panic!(
"mismatch variant when unwrapping enum {}",
stringify!($variant)
);
}
}};
}
macro_rules! break_on_err {
($x:expr) => {
match $x {
Ok(v) => v,
Err(e) => {
break Err(e.into());
},
}
};
($x:expr, $label:lifetime) => {
match $x {
Ok(v) => v,
Err(e) => {
break $label Err(e.into());
},
}
};
}
pub(crate) use break_on_err;
pub(crate) use unwrap_enum;