use melodium_common::descriptor::{Identifier, IdentifierRequirement, Version};
#[derive(Clone, PartialEq, Debug)]
pub struct Path {
version: Version,
path: Vec<String>,
}
impl Path {
pub fn new(version: Version, path: Vec<String>) -> Self {
Self { version, path }
}
pub fn version(&self) -> &Version {
&self.version
}
pub fn path(&self) -> &Vec<String> {
&self.path
}
pub fn root(&self) -> String {
self.path.first().map(|s| s.clone()).unwrap_or_default()
}
pub fn is_valid(&self) -> bool {
if self.path.len() > 0 {
!self.path.iter().any(|s| s.is_empty())
} else {
false
}
}
pub fn to_identifier(&self, element_name: &str) -> Option<Identifier> {
if self.is_valid() {
Some(Identifier::new_versionned(
&self.version,
self.path.clone(),
element_name,
))
} else {
None
}
}
pub fn to_identifier_requirement(&self, element_name: &str) -> Option<IdentifierRequirement> {
if self.is_valid() {
Some(
(&Identifier::new_versionned(&self.version, self.path.clone(), element_name))
.into(),
)
} else {
None
}
}
}