pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub const WIRE_FORMAT_VERSION: u16 = 1;
pub const MIN_WIRE_FORMAT_VERSION: u16 = 1;
pub const LEGACY_CLIENT_WIRE_VERSION: u16 = MIN_WIRE_FORMAT_VERSION;
pub fn check_wire_compatibility(remote_version: u16) -> crate::Result<()> {
if remote_version > WIRE_FORMAT_VERSION {
return Err(crate::Error::VersionCompat {
detail: format!(
"remote wire version {remote_version} is newer than local {WIRE_FORMAT_VERSION}; upgrade this node"
),
});
}
if remote_version < MIN_WIRE_FORMAT_VERSION {
return Err(crate::Error::VersionCompat {
detail: format!(
"remote wire version {remote_version} is too old (minimum {MIN_WIRE_FORMAT_VERSION}); upgrade the remote node"
),
});
}
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn same_version_compatible() {
assert!(check_wire_compatibility(WIRE_FORMAT_VERSION).is_ok());
}
#[test]
fn newer_version_rejected() {
assert!(check_wire_compatibility(WIRE_FORMAT_VERSION + 1).is_err());
}
#[test]
fn version_string_valid() {
assert!(!VERSION.is_empty());
}
}