use crate::base::id_generator::make_node_id;
#[allow(dead_code)]
pub fn validate_version(version: &str) -> bool {
for ch in version.chars() {
if (ch > '9' || ch < '0') && ch != '.' {
return false;
}
}
true
}
#[allow(dead_code)]
pub fn str_ip_to_int(str_ip: &str) -> u32 {
let words: Vec<&str> = str_ip.split('.').collect();
if words.len() != 4 {
return u32::MAX;
}
let word1 = words[0].parse::<u8>().unwrap();
let word2 = words[1].parse::<u8>().unwrap();
let word3 = words[2].parse::<u8>().unwrap();
let word4 = words[3].parse::<u8>().unwrap();
(word4 as u32) << 24 | (word3 as u32) << 16 | (word2 as u32) << 8 | (word1 as u32)
}
#[allow(dead_code)]
pub fn int_ip_to_str(int_ip: u32) -> String {
let word1 = ((int_ip >> 24) & 255) as u8;
let word2 = ((int_ip >> 16) & 255) as u8;
let word3 = ((int_ip >> 8) & 255) as u8;
let word4 = (int_ip & 255) as u8;
format!("{}.{}.{}.{}", word4, word3, word2, word1)
}
#[allow(dead_code)]
pub fn int_ip_from_conn_id(conn_id: i64) -> u32 {
(conn_id >> 16) as u32
}
#[allow(dead_code)]
pub fn addr_to_conn_id(addr: &str) -> i64 {
let words: Vec<&str> = addr.split(':').collect();
if words.len() != 2 {
return 0;
}
let port = words[1].parse::<u16>();
if port.is_err() {
return 0;
}
let port = port.unwrap();
make_node_id(words[0], port)
}
pub fn convert_to_snake_case(input: &str) -> String {
let input_length = input.chars().count();
let mut result = String::with_capacity(input_length + input_length / 2);
let mut chars = input.chars().peekable();
while let Some(c) = chars.next() {
if c.is_ascii_uppercase() {
if !result.is_empty() {
result.push('_');
}
result.push(c.to_ascii_lowercase());
} else {
result.push(c);
}
}
result
}
pub fn convert_to_camel_case(input: &str) -> String {
let mut output = String::new();
let mut capitalize_next = true;
for c in input.chars() {
if c == '_' || !c.is_ascii_alphanumeric() {
capitalize_next = true;
} else if capitalize_next {
output.push(c.to_ascii_uppercase());
capitalize_next = false;
} else {
output.push(c);
}
}
output
}
pub fn raw_to_string(bytes: *const u8, len: u32) -> String {
unsafe {
let file_name_slice = std::slice::from_raw_parts(bytes, len as usize);
let file_name_bytes = file_name_slice.to_vec();
String::from_utf8_unchecked(file_name_bytes)
}
}
pub fn extract_version(input: &str) -> Option<String> {
let mut words:Vec<&str> = input.split("_").collect();
if words.len() < 2 {
return None;
}
words.remove(0);
Some(words.join("_"))
}