Removal API

This commit is contained in:
Lucien Greathouse
2020-02-19 09:39:49 -08:00
parent 89b5d9294c
commit c7510e12c4
3 changed files with 28 additions and 1 deletions

View File

@@ -25,6 +25,8 @@ pub trait VfsBackend: sealed::Sealed {
fn write(&mut self, path: &Path, data: &[u8]) -> io::Result<()>;
fn read_dir(&mut self, path: &Path) -> io::Result<ReadDir>;
fn metadata(&mut self, path: &Path) -> io::Result<Metadata>;
fn remove_file(&mut self, path: &Path) -> io::Result<()>;
fn remove_dir_all(&mut self, path: &Path) -> io::Result<()>;
fn event_receiver(&self) -> crossbeam_channel::Receiver<VfsEvent>;
fn watch(&mut self, path: &Path) -> io::Result<()>;
@@ -84,6 +86,7 @@ impl VfsLock {
pub fn read<P: AsRef<Path>>(&mut self, path: P) -> io::Result<Arc<Vec<u8>>> {
let path = path.as_ref();
let contents = self.backend.read(path)?;
self.backend.watch(path)?;
Ok(Arc::new(contents))
}
@@ -99,7 +102,9 @@ impl VfsLock {
pub fn read_dir<P: AsRef<Path>>(&mut self, path: P) -> io::Result<ReadDir> {
let path = path.as_ref();
self.backend.read_dir(path)
let dir = self.backend.read_dir(path)?;
self.backend.watch(path)?;
Ok(dir)
}
pub fn event_receiver(&self) -> crossbeam_channel::Receiver<VfsEvent> {

View File

@@ -35,6 +35,20 @@ impl VfsBackend for NoopBackend {
))
}
fn remove_file(&mut self, _path: &Path) -> io::Result<()> {
Err(io::Error::new(
io::ErrorKind::Other,
"NoopBackend doesn't do anything",
))
}
fn remove_dir_all(&mut self, _path: &Path) -> io::Result<()> {
Err(io::Error::new(
io::ErrorKind::Other,
"NoopBackend doesn't do anything",
))
}
fn metadata(&mut self, _path: &Path) -> io::Result<Metadata> {
Err(io::Error::new(
io::ErrorKind::Other,

View File

@@ -74,6 +74,14 @@ impl VfsBackend for StdBackend {
})
}
fn remove_file(&mut self, path: &Path) -> io::Result<()> {
fs::remove_file(path)
}
fn remove_dir_all(&mut self, path: &Path) -> io::Result<()> {
fs::remove_dir_all(path)
}
fn metadata(&mut self, path: &Path) -> io::Result<Metadata> {
let inner = fs::metadata(path)?;