use crate::*;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Entry {
path: String,
meta: Metadata,
}
impl Entry {
pub fn new(path: &str, meta: Metadata) -> Entry {
Self::with(path.to_string(), meta)
}
pub fn with(mut path: String, meta: Metadata) -> Entry {
if path.is_empty() {
path = "/".to_string();
}
debug_assert!(
meta.mode().is_dir() == path.ends_with('/'),
"mode {:?} not match with path {}",
meta.mode(),
path
);
Entry { path, meta }
}
pub fn set_path(&mut self, path: &str) -> &mut Self {
self.path = path.to_string();
self
}
pub fn path(&self) -> &str {
&self.path
}
pub fn set_mode(&mut self, mode: EntryMode) -> &mut Self {
self.meta.set_mode(mode);
self
}
pub fn mode(&self) -> EntryMode {
self.meta.mode()
}
pub(crate) fn into_entry(self) -> crate::Entry {
crate::Entry::new(self.path, self.meta)
}
pub(crate) fn metadata(&self) -> &Metadata {
&self.meta
}
pub(crate) fn metadata_mut(&mut self) -> &mut Metadata {
&mut self.meta
}
}