use lazy_static::lazy_static;
use std::sync::RwLock;
lazy_static! {
pub static ref NETWORK_ID: RwLock<u8> = RwLock::new(1);
pub static ref IDENTIFY_NODE_VERSION_STR: RwLock<String> =
RwLock::new(format!(
"ant/node/{}/{}",
get_truncate_version_str(),
*NETWORK_ID.read().expect("Failed to obtain read lock for NETWORK_ID"),
));
pub static ref IDENTIFY_CLIENT_VERSION_STR: RwLock<String> =
RwLock::new(format!(
"ant/client/{}/{}",
get_truncate_version_str(),
*NETWORK_ID.read().expect("Failed to obtain read lock for NETWORK_ID"),
));
pub static ref REQ_RESPONSE_VERSION_STR: RwLock<String> =
RwLock::new(format!(
"/ant/{}/{}",
get_truncate_version_str(),
*NETWORK_ID.read().expect("Failed to obtain read lock for NETWORK_ID"),
));
pub static ref IDENTIFY_PROTOCOL_STR: RwLock<String> =
RwLock::new(format!(
"ant/{}/{}",
get_truncate_version_str(),
*NETWORK_ID.read().expect("Failed to obtain read lock for NETWORK_ID"),
));
}
pub fn set_network_id(id: u8) {
info!("Setting network id to: {id}");
let mut network_id = NETWORK_ID
.write()
.expect("Failed to obtain write lock for NETWORK_ID");
*network_id = id;
info!("Network id set to: {id}");
}
pub fn get_network_id() -> String {
format!(
"{}",
*NETWORK_ID
.read()
.expect("Failed to obtain read lock for NETWORK_ID")
)
}
pub fn get_truncate_version_str() -> String {
let version_str = env!("CARGO_PKG_VERSION");
let parts = version_str.split('.').collect::<Vec<_>>();
if parts.len() >= 2 {
format!("{}.{}", parts[0], parts[1])
} else {
panic!("Cannot obtain truncated version str for {version_str:?}: {parts:?}");
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_print_version_strings() -> Result<(), Box<dyn std::error::Error>> {
set_network_id(3);
println!(
"\nIDENTIFY_NODE_VERSION_STR: {}",
*IDENTIFY_NODE_VERSION_STR
.read()
.expect("Failed to obtain read lock for IDENTIFY_NODE_VERSION_STR")
);
println!(
"IDENTIFY_CLIENT_VERSION_STR: {}",
*IDENTIFY_CLIENT_VERSION_STR
.read()
.expect("Failed to obtain read lock for IDENTIFY_CLIENT_VERSION_STR")
);
println!(
"REQ_RESPONSE_VERSION_STR: {}",
*REQ_RESPONSE_VERSION_STR
.read()
.expect("Failed to obtain read lock for REQ_RESPONSE_VERSION_STR")
);
println!(
"IDENTIFY_PROTOCOL_STR: {}",
*IDENTIFY_PROTOCOL_STR
.read()
.expect("Failed to obtain read lock for IDENTIFY_PROTOCOL_STR")
);
let truncated = get_truncate_version_str();
println!("\nTruncated version: {truncated}");
let network_id = get_network_id();
println!("Network ID string: {network_id}");
Ok(())
}
}