use std::sync::RwLock;
static VERSION: RwLock<&str> = RwLock::new("");
static NAME: RwLock<&str> = RwLock::new("");
pub fn version() -> &'static str {
*VERSION.read().unwrap()
}
pub fn name() -> &'static str {
*NAME.read().unwrap()
}
pub fn init_version(cargo_toml: &'static str) -> &'static str {
let version = search(cargo_toml, "version=").unwrap_or("0.0.0");
*VERSION.write().unwrap() = version;
version
}
pub fn init_name(cargo_toml: &'static str) -> &'static str {
let name = search(cargo_toml, "name=").unwrap_or("kern");
*NAME.write().unwrap() = name;
name
}
pub fn search(cargo_toml: &'static str, key: &str) -> Option<&'static str> {
let blocks: Vec<&str> = cargo_toml.split('"').collect();
let mut value_string = None;
for (i, &block) in blocks.iter().enumerate() {
if i == 0 {
continue;
}
let previous_block = blocks[i - 1]
.split('\n')
.last()
.unwrap_or(blocks[i - 1])
.replace(' ', "");
if previous_block == key {
value_string = Some(block);
break;
}
}
value_string
}