use std::sync::{Arc, Mutex}; use tempfile::TempDir; use super::{Error, FileSystem}; #[derive(Clone, Debug)] pub struct TempFileSystem { real: FileSystem, _temp_dir: Arc>, } impl TempFileSystem { pub fn new() -> super::Result { let temp_dir = tempfile::tempdir().map_err(Error::Io)?; let base = temp_dir.path().to_path_buf(); let temp_dir = Arc::new(Mutex::new(temp_dir)); let real = super::new(base); Ok(Self { real, _temp_dir: temp_dir, }) } } impl std::ops::Deref for TempFileSystem { type Target = FileSystem; fn deref(&self) -> &Self::Target { &self.real } }