use std::{io::ErrorKind, path::Path};
use substring::Substring;
pub trait PathTrav {
fn is_path_trav(&self, rel: &Path) -> Result<bool, ErrorKind>;
}
impl PathTrav for std::path::Path {
fn is_path_trav(&self, rel: &Path) -> Result<bool, ErrorKind> {
let base_abs = match self.canonicalize() {
Err(err) => return Err(err.kind()),
Ok(data) => data,
};
let base_abs = match base_abs.to_str() {
None => return Err(ErrorKind::InvalidData),
Some(da) => da,
};
let rel_abs = match rel.canonicalize() {
Err(err) => return Err(err.kind()),
Ok(data) => data,
};
let rel_abs = match rel_abs.to_str() {
None => return Err(ErrorKind::InvalidData),
Some(da) => da,
};
let trimmed_rel_abs = rel_abs.substring(0, base_abs.len());
Ok(!trimmed_rel_abs.eq(base_abs))
}
}