From 89b5d9294c248f5b178fc81da6b89794c2205e91 Mon Sep 17 00:00:00 2001 From: Lucien Greathouse Date: Wed, 19 Feb 2020 09:36:38 -0800 Subject: [PATCH] Event receiving/committing infrastructure --- vfs/src/lib.rs | 21 ++++++++++++++++++++- vfs/src/noop_backend.rs | 2 +- vfs/src/std_backend.rs | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/vfs/src/lib.rs b/vfs/src/lib.rs index 19b76a6e..c2f434e4 100644 --- a/vfs/src/lib.rs +++ b/vfs/src/lib.rs @@ -26,7 +26,7 @@ pub trait VfsBackend: sealed::Sealed { fn read_dir(&mut self, path: &Path) -> io::Result; fn metadata(&mut self, path: &Path) -> io::Result; - fn event_receiver(&mut self) -> crossbeam_channel::Receiver; + fn event_receiver(&self) -> crossbeam_channel::Receiver; fn watch(&mut self, path: &Path) -> io::Result<()>; fn unwatch(&mut self, path: &Path) -> io::Result<()>; } @@ -101,6 +101,15 @@ impl VfsLock { let path = path.as_ref(); self.backend.read_dir(path) } + + pub fn event_receiver(&self) -> crossbeam_channel::Receiver { + self.backend.event_receiver() + } + + pub fn commit_event(&mut self, _event: &VfsEvent) -> io::Result<()> { + // Because we hold no state, there's no cache to update here. + Ok(()) + } } /// A virtual filesystem with a configurable backend. @@ -156,4 +165,14 @@ impl Vfs { let path = path.as_ref(); self.inner.lock().unwrap().read_dir(path) } + + /// Retrieve a handle to the event receiver for this `Vfs`. + pub fn event_receiver(&self) -> crossbeam_channel::Receiver { + self.inner.lock().unwrap().event_receiver() + } + + /// Commit an event to this `Vfs`. + pub fn commit_event(&self, event: &VfsEvent) -> io::Result<()> { + self.inner.lock().unwrap().commit_event(event) + } } diff --git a/vfs/src/noop_backend.rs b/vfs/src/noop_backend.rs index 5d73bd1d..b28103ab 100644 --- a/vfs/src/noop_backend.rs +++ b/vfs/src/noop_backend.rs @@ -42,7 +42,7 @@ impl VfsBackend for NoopBackend { )) } - fn event_receiver(&mut self) -> crossbeam_channel::Receiver { + fn event_receiver(&self) -> crossbeam_channel::Receiver { crossbeam_channel::never() } diff --git a/vfs/src/std_backend.rs b/vfs/src/std_backend.rs index d42d8d6c..d0236c8c 100644 --- a/vfs/src/std_backend.rs +++ b/vfs/src/std_backend.rs @@ -82,7 +82,7 @@ impl VfsBackend for StdBackend { }) } - fn event_receiver(&mut self) -> crossbeam_channel::Receiver { + fn event_receiver(&self) -> crossbeam_channel::Receiver { self.watcher_receiver.clone() }