Files
nix-output/src/nix_path.rs

42 lines
1.1 KiB
Rust

const NIX_STORE_PREFIX: &str = "/nix/store/";
const NIX_HASH_LENGTH: usize = 32;
pub fn extract_package_name(path: &str) -> Option<Vec<&str>> {
let without_prefix = path.strip_prefix(NIX_STORE_PREFIX)?;
if without_prefix.len() <= NIX_HASH_LENGTH + 1 {
return None;
}
let after_hash = &without_prefix[NIX_HASH_LENGTH + 1..];
let parts: Vec<&str> = after_hash.split('-').collect();
if parts.is_empty() {
return None;
}
let name_parts: Vec<&str> = parts
.iter()
.take_while(|part| !part.chars().next().map_or(false, |c| c.is_ascii_digit()))
.copied()
.collect();
if name_parts.is_empty() {
return None;
}
Some(name_parts)
}
pub fn extract_package_name_string(path: &str) -> Option<String> {
extract_package_name(path).map(|f| f.join("-"))
}
pub fn extract_full_name(path: &str) -> Option<&str> {
let without_prefix = path.strip_prefix(NIX_STORE_PREFIX)?;
if without_prefix.len() <= NIX_HASH_LENGTH + 1 {
return None;
}
Some(&without_prefix[NIX_HASH_LENGTH + 1..])
}