use crate::LynnError;
pub const MAX_MESSAGE_SIZE: usize = 10 * 1024 * 1024;
pub const MIN_MESSAGE_SIZE: usize = 3;
pub fn validate_message_length(len: u64) -> Result<usize, LynnError> {
let len = if len > usize::MAX as u64 {
return Err(LynnError::protocol(format!(
"Message length {} exceeds usize::MAX",
len
)));
} else {
len as usize
};
if len < MIN_MESSAGE_SIZE {
return Err(LynnError::protocol(format!(
"Message too short: {} bytes (minimum {})",
len, MIN_MESSAGE_SIZE
)));
}
if len > MAX_MESSAGE_SIZE {
return Err(LynnError::protocol(format!(
"Message too large: {} bytes (maximum {})",
len, MAX_MESSAGE_SIZE
)));
}
Ok(len)
}
#[cfg(test)]
#[cfg(feature = "server")]
mod tests {
use super::*;
#[test]
fn test_validate_message_length_valid() {
assert_eq!(validate_message_length(100).unwrap(), 100);
assert_eq!(validate_message_length(1024).unwrap(), 1024);
}
#[test]
fn test_validate_message_length_too_small() {
assert!(validate_message_length(2).is_err());
assert!(validate_message_length(0).is_err());
}
#[test]
fn test_validate_message_length_too_large() {
assert!(validate_message_length(MAX_MESSAGE_SIZE as u64 + 1).is_err());
}
}