1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
//! Virtual file system abstraction //! //! The virtual file system abstraction generalizes over file systems and allow using //! different VirtualFileSystem implementations (i.e. an in memory implementation for unit tests) //! //! The main interaction with the virtual filesystem is by using virtual paths ([`VfsPath`](path/struct.VfsPath.html)). //! //! This crate currently has the following implementations: //! //! * **[`PhysicalFS`](impls/physical/struct.PhysicalFS.html)** - the actual filesystem of the underlying OS //! * **[`MemoryFS`](impls/memory/struct.MemoryFS.html)** - an ephemeral in-memory implementation (intended for unit tests) //! * **[`AltrootFS`](impls/altroot/struct.AltrootFS.html)** - a file system with its root in a particular directory of another filesystem //! * **[`OverlayFS`](impls/overlay/struct.OverlayFS.html)** - a union file system consisting of a read/writable upper layer and several read-only lower layers //! * **[`EmbeddedFS`](impls/embedded/struct.EmbeddedFs.html)** - a read-only file system embedded in the executable, requires `embedded-fs` feature //! //! # Usage Examples //! //! ``` //! use vfs::{VfsPath, PhysicalFS, VfsError}; //! //! # fn main() -> vfs::VfsResult<()> { //! let root: VfsPath = PhysicalFS::new(std::env::current_dir().unwrap()).into(); //! assert!(root.exists()?); //! //! let mut content = String::new(); //! root.join("README.md")?.open_file()?.read_to_string(&mut content)?; //! assert!(content.contains("vfs")); //! # Ok::<(), VfsError>(()) //! # } //! ``` //! //! ``` //! use vfs::{VfsPath, VfsError, MemoryFS}; //! //! # fn main() -> vfs::VfsResult<()> { //! let root: VfsPath = MemoryFS::new().into(); //! let path = root.join("test.txt")?; //! assert!(!path.exists()?); //! //! path.create_file()?.write_all(b"Hello world")?; //! assert!(path.exists()?); //! let mut content = String::new(); //! path.open_file()?.read_to_string(&mut content)?; //! assert_eq!(content, "Hello world"); //! # Ok::<(), VfsError>(()) //! # } //! ``` //! #![allow(clippy::unknown_clippy_lints)] #![allow(clippy::upper_case_acronyms)] #[cfg(any(test, feature = "export-test-macros"))] #[macro_use] pub mod test_macros; pub mod error; pub mod filesystem; pub mod impls; pub mod path; pub use error::{VfsError, VfsResult}; pub use filesystem::FileSystem; #[cfg(feature = "embedded-fs")] pub use impls::embedded::EmbeddedFS; pub use impls::memory::MemoryFS; pub use impls::physical::PhysicalFS; pub use path::*;