blob: 31901ef0afafdcc20fca2021c7114196c991fe8c [file]
// Copyright 2023 the Vello Authors
// SPDX-License-Identifier: Apache-2.0 OR MIT
use std::time::Duration;
use anyhow::Result;
use notify_debouncer_full::notify::RecursiveMode;
use notify_debouncer_full::{DebounceEventResult, new_debouncer};
pub fn hot_reload(mut f: impl FnMut() -> Option<()> + Send + 'static) -> Result<impl Sized> {
let mut debouncer = new_debouncer(
Duration::from_millis(500),
None,
move |res: DebounceEventResult| match res {
Ok(events) => {
for event in events {
// Don't hot reload if the file was only read (i.e. by us...)
if !matches!(
event.kind,
notify_debouncer_full::notify::EventKind::Access(_)
) {
f().unwrap();
break;
}
}
}
Err(e) => println!("Hot reloading file watching failed: {e:?}"),
},
)?;
debouncer.watch(
vello_shaders::compile::shader_dir().as_path(),
// We currently don't support hot reloading the imports, so don't recurse into there
RecursiveMode::NonRecursive,
)?;
Ok(debouncer)
}