summaryrefslogtreecommitdiff
path: root/src/watch.rs
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-04-09 21:46:55 +0200
committermo8it <mo8it@proton.me>2024-04-09 21:46:55 +0200
commit4110ae21afd2c026e49d330918e212f4ab0eb5cc (patch)
tree08f3f4433277e37d4774389639603678779b1c97 /src/watch.rs
parentb15e0a279b17d29a3fa6408b76da35f0b843ce21 (diff)
Handle notify errors
Diffstat (limited to 'src/watch.rs')
-rw-r--r--src/watch.rs50
1 files changed, 28 insertions, 22 deletions
diff --git a/src/watch.rs b/src/watch.rs
index abf4002..5a1e38a 100644
--- a/src/watch.rs
+++ b/src/watch.rs
@@ -1,6 +1,8 @@
use anyhow::{bail, Context, Result};
use notify_debouncer_mini::{
- new_debouncer, notify::RecursiveMode, DebounceEventResult, DebouncedEventKind,
+ new_debouncer,
+ notify::{self, RecursiveMode},
+ DebounceEventResult, DebouncedEventKind,
};
use std::{
io::{self, BufRead, Write},
@@ -26,6 +28,7 @@ enum InputEvent {
enum WatchEvent {
Input(InputEvent),
FileChange { exercise_ind: usize },
+ NotifyErr(notify::Error),
TerminalResize,
}
@@ -36,30 +39,32 @@ struct DebouceEventHandler {
impl notify_debouncer_mini::DebounceEventHandler for DebouceEventHandler {
fn handle_event(&mut self, event: DebounceEventResult) {
- let Ok(event) = event else {
- // TODO
- return;
- };
-
- let Some(exercise_ind) = event
- .iter()
- .filter_map(|event| {
- if event.kind != DebouncedEventKind::Any
- || !event.path.extension().is_some_and(|ext| ext == "rs")
- {
- return None;
- }
-
- self.exercises
+ let event = match event {
+ Ok(event) => {
+ let Some(exercise_ind) = event
.iter()
- .position(|exercise| event.path.ends_with(&exercise.path))
- })
- .min()
- else {
- return;
+ .filter_map(|event| {
+ if event.kind != DebouncedEventKind::Any
+ || !event.path.extension().is_some_and(|ext| ext == "rs")
+ {
+ return None;
+ }
+
+ self.exercises
+ .iter()
+ .position(|exercise| event.path.ends_with(&exercise.path))
+ })
+ .min()
+ else {
+ return;
+ };
+
+ WatchEvent::FileChange { exercise_ind }
+ }
+ Err(e) => WatchEvent::NotifyErr(e),
};
- self.tx.send(WatchEvent::FileChange { exercise_ind });
+ let _ = self.tx.send(event);
}
}
@@ -125,6 +130,7 @@ pub fn watch(state_file: &StateFile, exercises: &'static [Exercise]) -> Result<(
watch_state.run_exercise_with_ind(exercise_ind)?;
watch_state.render()?;
}
+ WatchEvent::NotifyErr(e) => return Err(e.into()),
}
}