pub trait Navigator<E, R, P>: Clone
where
    E: NavigatorEntry,
    R: NavigatorRoot,
{
    fn entries(&self, path: &P) -> Vec<E>;
    fn roots(&self) -> Vec<R>;
    fn new() -> Self;
    fn join(&self, path: &P, entry: &E) -> Option<P>;
    fn exists(&self, path: &P) -> Option<bool>;
    fn current_dir(&self) -> P;
}
pub trait NavigatorEntry {
    fn name(&self) -> &str;
    fn is_container(&self) -> bool;
}
pub trait NavigatorRoot {
    #[cfg(test)]
    fn path(&self) -> &str;
}
