[−][src]Trait notify::Watcher
Type that can deliver file activity notifications
Watcher is implemented per platform using the best implementation available on that platform. In addition to such event driven implementations, a polling implementation is also provided that should work on any platform.
Required methods
fn new_immediate(tx: Sender<RawEvent>) -> Result<Self>
Create a new watcher in immediate mode.
Events will be sent using the provided tx
immediately after they occur.
fn new(tx: Sender<Result<Event>>, delay: Duration) -> Result<Self>
Create a new debounced watcher with a delay
.
Events won't be sent immediately; every iteration they will be collected, deduplicated, and emitted only after the specified delay.
Advantages
This has the advantage that a lot of logic can be offloaded to Notify.
For example you won't have to handle Modify(Name(From|To))
events yourself by piecing the
two rename events together. Instead you will just receive a Modify(Name(Both))
with two
paths from
and to
in that order.
Notify will also detect the beginning and the end of write operations. As soon as something
is written to a file, a Modify
notice is emitted. If no new event arrived until after the
specified delay
, a Modify
event is emitted.
A practical example is "safe-saving", where a temporary file is created and written to, then
only when everything has been written is it renamed to overwrite the file that was meant to
be saved. Instead of receiving a Create
event for the temporary file, Modify(Data)
events to that file, and a Modify(Name)
event from the temporary file to the file being
saved, you will just receive a single Modify(Data)
event.
If you use a delay of more than 30 seconds, you can avoid receiving repetitions of previous events on macOS.
Disadvantages
Your application might not feel as responsive.
If a file is saved very slowly, you might receive a Modify
event even though the file is
still being written to.
fn watch<P: AsRef<Path>>(
&mut self,
path: P,
recursive_mode: RecursiveMode
) -> Result<()>
&mut self,
path: P,
recursive_mode: RecursiveMode
) -> Result<()>
Begin watching a new path.
If the path
is a directory, recursive_mode
will be evaluated. If recursive_mode
is
RecursiveMode::Recursive
events will be delivered for all files in that tree. Otherwise
only the directory and its immediate children will be watched.
If the path
is a file, recursive_mode
will be ignored and events will be delivered only
for the file.
On some platforms, if the path
is renamed or removed while being watched, behaviour may
be unexpected. See discussions in #165 and #166. If less surprising behaviour is wanted
one may non-recursively watch the parent directory as well and manage related events.
fn unwatch<P: AsRef<Path>>(&mut self, path: P) -> Result<()>
Stop watching a path.
Errors
Returns an error in the case that path
has not been watched or if removing the watch
fails.
Provided methods
Loading content...Implementors
impl Watcher for FsEventWatcher
[src]
fn new_immediate(tx: Sender<RawEvent>) -> Result<FsEventWatcher>
[src]
fn new(tx: Sender<Result<Event>>, delay: Duration) -> Result<FsEventWatcher>
[src]
fn watch<P: AsRef<Path>>(
&mut self,
path: P,
recursive_mode: RecursiveMode
) -> Result<()>
[src]
&mut self,
path: P,
recursive_mode: RecursiveMode
) -> Result<()>
fn unwatch<P: AsRef<Path>>(&mut self, path: P) -> Result<()>
[src]
fn configure(&mut self, config: Config) -> Result<bool>
[src]
impl Watcher for NullWatcher
[src]
fn new_immediate(tx: Sender<RawEvent>) -> Result<NullWatcher>
[src]
fn new(tx: Sender<Result<Event>>, delay: Duration) -> Result<NullWatcher>
[src]
fn watch<P: AsRef<Path>>(
&mut self,
path: P,
recursive_mode: RecursiveMode
) -> Result<()>
[src]
&mut self,
path: P,
recursive_mode: RecursiveMode
) -> Result<()>
fn unwatch<P: AsRef<Path>>(&mut self, path: P) -> Result<()>
[src]
impl Watcher for PollWatcher
[src]
fn new_immediate(tx: Sender<RawEvent>) -> Result<PollWatcher>
[src]
fn new(tx: Sender<Result<Event>>, delay: Duration) -> Result<PollWatcher>
[src]
fn watch<P: AsRef<Path>>(
&mut self,
path: P,
recursive_mode: RecursiveMode
) -> Result<()>
[src]
&mut self,
path: P,
recursive_mode: RecursiveMode
) -> Result<()>