pub struct FileWatcher { /* private fields */ }Expand description
A file watcher for detecting file system changes.
Uses the notify crate internally to watch files and directories
for changes. Provides a non-blocking interface suitable for use
in TUI event loops.
Implementations§
Source§impl FileWatcher
impl FileWatcher
Sourcepub fn for_directory() -> Result<Self, Error>
pub fn for_directory() -> Result<Self, Error>
Create a file watcher preset for watching a directory recursively.
Uses WatchMode::Recursive with 200ms debounce (longer to handle
rapid changes during builds or git operations).
§Errors
Returns a notify::Error if the watcher cannot be created.
§Example
use ratatui_toolkit::services::file_watcher::FileWatcher;
use std::path::Path;
let mut watcher = FileWatcher::for_directory().unwrap();
watcher.watch(Path::new("./src")).unwrap();Source§impl FileWatcher
impl FileWatcher
Sourcepub fn for_file() -> Result<Self, Error>
pub fn for_file() -> Result<Self, Error>
Create a file watcher preset for watching a single file.
Uses WatchMode::File (non-recursive) with 100ms debounce.
§Errors
Returns a notify::Error if the watcher cannot be created.
§Example
use ratatui_toolkit::services::file_watcher::FileWatcher;
use std::path::Path;
let mut watcher = FileWatcher::for_file().unwrap();
watcher.watch(Path::new("config.toml")).unwrap();Source§impl FileWatcher
impl FileWatcher
Sourcepub fn with_config(config: WatchConfig) -> Result<Self, Error>
pub fn with_config(config: WatchConfig) -> Result<Self, Error>
Create a new file watcher with custom configuration.
§Arguments
config- Configuration for the watcher.
§Errors
Returns a notify::Error if the watcher cannot be created.
§Example
use ratatui_toolkit::services::file_watcher::{FileWatcher, WatchConfig, WatchMode};
let config = WatchConfig::new()
.mode(WatchMode::Recursive)
.debounce_ms(200);
let watcher = FileWatcher::with_config(config).unwrap();Source§impl FileWatcher
impl FileWatcher
Sourcepub fn check_for_changes(&mut self) -> bool
pub fn check_for_changes(&mut self) -> bool
Check if there are any pending file change events.
This is a non-blocking operation that returns true if any
relevant file modifications have been detected since the last check.
Changed paths are stored internally and can be retrieved with
get_changed_paths.
§Returns
true if file changes were detected, false otherwise.
§Example
use ratatui_toolkit::services::file_watcher::FileWatcher;
use std::path::Path;
let mut watcher = FileWatcher::new().unwrap();
watcher.watch(Path::new("README.md")).unwrap();
// In your event loop:
if watcher.check_for_changes() {
println!("Files changed!");
let paths = watcher.get_changed_paths();
for path in paths {
println!(" - {}", path.display());
}
}Source§impl FileWatcher
impl FileWatcher
Sourcepub fn drain_events(&mut self)
pub fn drain_events(&mut self)
Drain all pending events without processing them.
This clears the event queue and the changed paths list, useful when you want to ignore accumulated changes (e.g., after a batch operation).
§Example
use ratatui_toolkit::services::file_watcher::FileWatcher;
use std::path::Path;
let mut watcher = FileWatcher::new().unwrap();
watcher.watch(Path::new("README.md")).unwrap();
// After some operation that causes many changes:
watcher.drain_events();Source§impl FileWatcher
impl FileWatcher
Sourcepub fn get_changed_paths(&mut self) -> Vec<PathBuf>
pub fn get_changed_paths(&mut self) -> Vec<PathBuf>
Get the paths that have changed since the last call.
This returns and clears the internal list of changed paths.
Call check_for_changes first to
populate this list.
§Returns
A vector of paths that have changed.
§Example
use ratatui_toolkit::services::file_watcher::FileWatcher;
use std::path::Path;
let mut watcher = FileWatcher::for_directory().unwrap();
watcher.watch(Path::new("./src")).unwrap();
// In your event loop:
if watcher.check_for_changes() {
for path in watcher.get_changed_paths() {
println!("Changed: {}", path.display());
}
}Sourcepub fn peek_changed_paths(&self) -> &[PathBuf]
pub fn peek_changed_paths(&self) -> &[PathBuf]
Peek at the changed paths without clearing them.
Unlike get_changed_paths, this does
not clear the internal list.
§Returns
A slice of paths that have changed.
Source§impl FileWatcher
impl FileWatcher
Sourcepub fn unwatch(&mut self, path: &Path) -> Result<(), Error>
pub fn unwatch(&mut self, path: &Path) -> Result<(), Error>
Stop watching a path.
§Arguments
path- Path to stop watching.
§Errors
Returns a notify::Error if the path cannot be unwatched.
§Example
use ratatui_toolkit::services::file_watcher::FileWatcher;
use std::path::Path;
let mut watcher = FileWatcher::new().unwrap();
let path = Path::new("README.md");
watcher.watch(path).unwrap();
// Later...
watcher.unwatch(path).unwrap();Source§impl FileWatcher
impl FileWatcher
Sourcepub fn watch(&mut self, path: &Path) -> Result<(), Error>
pub fn watch(&mut self, path: &Path) -> Result<(), Error>
Start watching a path for changes.
The watch mode (recursive or non-recursive) is determined by the configuration used when creating the watcher.
§Arguments
path- Path to the file or directory to watch.
§Errors
Returns a notify::Error if the path cannot be watched.
§Example
use ratatui_toolkit::services::file_watcher::FileWatcher;
use std::path::Path;
let mut watcher = FileWatcher::new().unwrap();
watcher.watch(Path::new("README.md")).unwrap();Trait Implementations§
Auto Trait Implementations§
impl Freeze for FileWatcher
impl RefUnwindSafe for FileWatcher
impl Send for FileWatcher
impl !Sync for FileWatcher
impl Unpin for FileWatcher
impl UnwindSafe for FileWatcher
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more