use alloc::{format, string::String, vec::Vec};
use crate::types::{Error, Result};
pub(crate) fn components(path: &str) -> Result<Vec<&str>> {
let parts = path
.split('/')
.filter(|component| !component.is_empty())
.collect::<Vec<_>>();
if parts.is_empty() {
return Err(Error::InvalidPath);
}
Ok(parts)
}
pub(crate) fn normalize_dir_path(path: &str) -> Result<String> {
if path.is_empty() || path == "/" {
return Ok(String::from("/"));
}
let parts = components(path)?;
Ok(format!("/{}", parts.join("/")))
}
pub(crate) fn join_path(parent: &str, name: &str) -> String {
if parent == "/" {
format!("/{name}")
} else {
format!("{parent}/{name}")
}
}