1use std::io;
2use std::path::{Path, PathBuf};
3
4pub(crate) mod compound;
5pub(crate) mod vfs_map;
6
7#[cfg(feature = "read_fs")]
8pub(crate) mod vfs_fs;
9#[cfg(feature = "read_zip")]
10pub(crate) mod vfs_zip;
11
12pub trait VirtualFs {
13 fn read_file(&self, path: &Path) -> io::Result<String>;
14
15 fn read_dir(&self, path: &Path) -> io::Result<Vec<PathBuf>>;
16
17 fn is_file(&self, path: &Path) -> bool;
18
19 fn is_dir(&self, path: &Path) -> bool;
20
21 fn canonicalize_path(&self, path: &PathBuf) -> io::Result<PathBuf>;
22
23 fn is_local(&self, path: &str) -> bool {
24 path == "." || path == ".." || path.starts_with("./") || path.starts_with("../")
25 }
26
27 fn strip_prefix<'a>(&'a self, path: &'a Path) -> &'a Path {
28 path
29 }
30}