mod std_fs;
pub use std_fs::StdFs;
use std::io;
use std::path::{Path, PathBuf};
pub trait Fs: Send + Sync {
fn exists(&self, path: &Path) -> bool;
fn is_file(&self, path: &Path) -> bool;
fn is_dir(&self, path: &Path) -> bool;
fn create_dir_all(&self, path: &Path) -> io::Result<()>;
fn read_dir(&self, path: &Path) -> Vec<PathBuf> {
if !self.is_dir(path) {
return Vec::new();
}
std::fs::read_dir(path)
.map(|entries| {
entries
.filter_map(Result::ok)
.map(|entry| entry.path())
.collect()
})
.unwrap_or_default()
}
fn metadata(&self, path: &Path) -> Option<std::fs::Metadata> {
std::fs::metadata(path).ok()
}
}