use std::path::PathBuf;
pub(crate) struct TestDataDirGuard;
impl Drop for TestDataDirGuard {
fn drop(&mut self) {
test_data_dir_with(|slot| *slot = None);
}
}
fn test_data_dir_with<F: FnOnce(&mut Option<PathBuf>)>(f: F) {
TEST_DATA_DIR.with(|cell| f(&mut cell.borrow_mut()))
}
thread_local! {
static TEST_DATA_DIR: std::cell::RefCell<Option<PathBuf>> = std::cell::RefCell::new(None);
}
pub(crate) fn set_test_data_dir(dir: &std::path::Path) -> TestDataDirGuard {
test_data_dir_with(|slot| *slot = Some(dir.to_path_buf()));
TestDataDirGuard
}
pub(crate) fn test_data_dir() -> Option<PathBuf> {
let mut result = None;
test_data_dir_with(|slot| result = slot.clone());
result
}