mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-10-22 13:21:38 +00:00
Event receiving/committing infrastructure
This commit is contained in:
parent
339e1060b7
commit
89b5d9294c
3 changed files with 22 additions and 3 deletions
|
|
@ -26,7 +26,7 @@ pub trait VfsBackend: sealed::Sealed {
|
||||||
fn read_dir(&mut self, path: &Path) -> io::Result<ReadDir>;
|
fn read_dir(&mut self, path: &Path) -> io::Result<ReadDir>;
|
||||||
fn metadata(&mut self, path: &Path) -> io::Result<Metadata>;
|
fn metadata(&mut self, path: &Path) -> io::Result<Metadata>;
|
||||||
|
|
||||||
fn event_receiver(&mut self) -> crossbeam_channel::Receiver<VfsEvent>;
|
fn event_receiver(&self) -> crossbeam_channel::Receiver<VfsEvent>;
|
||||||
fn watch(&mut self, path: &Path) -> io::Result<()>;
|
fn watch(&mut self, path: &Path) -> io::Result<()>;
|
||||||
fn unwatch(&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();
|
let path = path.as_ref();
|
||||||
self.backend.read_dir(path)
|
self.backend.read_dir(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn event_receiver(&self) -> crossbeam_channel::Receiver<VfsEvent> {
|
||||||
|
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.
|
/// A virtual filesystem with a configurable backend.
|
||||||
|
|
@ -156,4 +165,14 @@ impl Vfs {
|
||||||
let path = path.as_ref();
|
let path = path.as_ref();
|
||||||
self.inner.lock().unwrap().read_dir(path)
|
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<VfsEvent> {
|
||||||
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ impl VfsBackend for NoopBackend {
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn event_receiver(&mut self) -> crossbeam_channel::Receiver<VfsEvent> {
|
fn event_receiver(&self) -> crossbeam_channel::Receiver<VfsEvent> {
|
||||||
crossbeam_channel::never()
|
crossbeam_channel::never()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ impl VfsBackend for StdBackend {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn event_receiver(&mut self) -> crossbeam_channel::Receiver<VfsEvent> {
|
fn event_receiver(&self) -> crossbeam_channel::Receiver<VfsEvent> {
|
||||||
self.watcher_receiver.clone()
|
self.watcher_receiver.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue