use crate::{Error, Result};
pub const DEREC_REPLICA_ID_KEY: &str = "derec.replica_id";
pub fn encode_replica_id(id: u64) -> String {
id.to_string()
}
pub fn decode_replica_id(s: &str) -> Result<u64> {
s.parse::<u64>().map_err(|_| {
Error::InvalidInput("CommunicationInfo `derec.replica_id` is not valid decimal u64")
})
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn encode_replica_id_is_decimal() {
assert_eq!(encode_replica_id(51966), "51966");
assert_eq!(encode_replica_id(0), "0");
assert_eq!(encode_replica_id(u64::MAX), "18446744073709551615");
}
#[test]
fn decode_replica_id_round_trips_decimal() {
for id in [0_u64, 1, 42, 51966, u64::MAX] {
assert_eq!(decode_replica_id(&encode_replica_id(id)).unwrap(), id);
}
}
#[test]
fn decode_replica_id_rejects_invalid_input() {
assert!(decode_replica_id("18446744073709551616").is_err());
assert!(decode_replica_id("cafe").is_err());
assert!(decode_replica_id("0xcafe").is_err());
assert!(decode_replica_id("g").is_err());
assert!(decode_replica_id("-1").is_err());
assert!(decode_replica_id(" 42").is_err());
assert!(decode_replica_id("42 ").is_err());
assert!(decode_replica_id("").is_err());
}
}