use std::ops::RangeInclusive;
pub const PROTOCOL_NAME: &str = "rift";
pub const PROTOCOL_MAJOR: u16 = 1;
pub const PROTOCOL_MINOR: u16 = 0;
pub const SUPPORTED_MAJOR: RangeInclusive<u16> = 1..=1;
pub const fn encoded_version() -> u16 {
(PROTOCOL_MAJOR << 8) | PROTOCOL_MINOR
}
pub fn negotiate_major(client_major: u16) -> Option<u16> {
if SUPPORTED_MAJOR.contains(&client_major) {
Some(client_major)
} else {
None
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn encoded_is_major_minor() {
assert_eq!(encoded_version(), 0x0100);
}
#[test]
fn negotiate_accepts_self() {
assert_eq!(negotiate_major(1), Some(1));
}
#[test]
fn negotiate_rejects_other() {
assert_eq!(negotiate_major(0), None);
assert_eq!(negotiate_major(2), None);
assert_eq!(negotiate_major(99), None);
}
}