Struct virtual_fs::OverlayFileSystem
source · pub struct OverlayFileSystem<P, S> { /* private fields */ }
Expand description
A primary filesystem and chain of secondary filesystems that are overlayed on top of each other.
Precedence
The OverlayFileSystem
will execute operations based on precedence.
Most importantly, this means earlier filesystems can shadow files and directories that have a lower precedence.
Examples
Something useful to know is that the FileSystems
trait is implemented
for both arrays and tuples.
For example, if you want to create a crate::FileSystem
which will
create files in-memory while still being able to read from the host, you
might do something like this:
use virtual_fs::{
mem_fs::FileSystem as MemFS,
host_fs::FileSystem as HostFS,
OverlayFileSystem,
};
let fs = OverlayFileSystem::new(MemFS::default(), [HostFS]);
// This also has the benefit of storing the two values in-line with no extra
// overhead or indirection.
assert_eq!(
std::mem::size_of_val(&fs),
std::mem::size_of::<(MemFS, HostFS)>(),
);
A more complex example is
Implementations§
source§impl<P, S> OverlayFileSystem<P, S>where
P: FileSystem + 'static,
S: for<'a> FileSystems<'a> + Send + Sync + 'static,
impl<P, S> OverlayFileSystem<P, S>where P: FileSystem + 'static, S: for<'a> FileSystems<'a> + Send + Sync + 'static,
sourcepub fn new(primary: P, secondaries: S) -> Self
pub fn new(primary: P, secondaries: S) -> Self
Create a new FileSystem
using a primary crate::FileSystem
and a
chain of secondary FileSystems
.
sourcepub fn primary_mut(&mut self) -> &mut P
pub fn primary_mut(&mut self) -> &mut P
Get a mutable reference to the primary filesystem.
sourcepub fn secondaries(&self) -> &S
pub fn secondaries(&self) -> &S
Get a reference to the secondary filesystems.
sourcepub fn secondaries_mut(&mut self) -> &mut S
pub fn secondaries_mut(&mut self) -> &mut S
Get a mutable reference to the secondary filesystems.
sourcepub fn into_inner(self) -> (P, S)
pub fn into_inner(self) -> (P, S)
Consume the OverlayFileSystem
, returning the underlying primary and
secondary filesystems.
Trait Implementations§
source§impl<P: Clone, S: Clone> Clone for OverlayFileSystem<P, S>
impl<P: Clone, S: Clone> Clone for OverlayFileSystem<P, S>
source§fn clone(&self) -> OverlayFileSystem<P, S>
fn clone(&self) -> OverlayFileSystem<P, S>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<P, S> Debug for OverlayFileSystem<P, S>where
P: FileSystem,
S: for<'a> FileSystems<'a>,
impl<P, S> Debug for OverlayFileSystem<P, S>where P: FileSystem, S: for<'a> FileSystems<'a>,
source§impl<P, S> FileOpener for OverlayFileSystem<P, S>where
P: FileSystem,
S: for<'a> FileSystems<'a> + Send + Sync + 'static,
impl<P, S> FileOpener for OverlayFileSystem<P, S>where P: FileSystem, S: for<'a> FileSystems<'a> + Send + Sync + 'static,
source§impl<P, S> FileSystem for OverlayFileSystem<P, S>where
P: FileSystem + 'static,
S: for<'a> FileSystems<'a> + Send + Sync + 'static,
impl<P, S> FileSystem for OverlayFileSystem<P, S>where P: FileSystem + 'static, S: for<'a> FileSystems<'a> + Send + Sync + 'static,
fn read_dir(&self, path: &Path) -> Result<ReadDir, FsError>
fn create_dir(&self, path: &Path) -> Result<(), FsError>
fn remove_dir(&self, path: &Path) -> Result<(), FsError>
fn rename(&self, from: &Path, to: &Path) -> Result<(), FsError>
fn metadata(&self, path: &Path) -> Result<Metadata, FsError>
fn remove_file(&self, path: &Path) -> Result<(), FsError>
fn new_open_options(&self) -> OpenOptions<'_>
source§impl<P: PartialEq, S: PartialEq> PartialEq<OverlayFileSystem<P, S>> for OverlayFileSystem<P, S>
impl<P: PartialEq, S: PartialEq> PartialEq<OverlayFileSystem<P, S>> for OverlayFileSystem<P, S>
source§fn eq(&self, other: &OverlayFileSystem<P, S>) -> bool
fn eq(&self, other: &OverlayFileSystem<P, S>) -> bool
self
and other
values to be equal, and is used
by ==
.impl<P: Eq, S: Eq> Eq for OverlayFileSystem<P, S>
impl<P, S> StructuralEq for OverlayFileSystem<P, S>
impl<P, S> StructuralPartialEq for OverlayFileSystem<P, S>
Auto Trait Implementations§
impl<P, S> RefUnwindSafe for OverlayFileSystem<P, S>where P: RefUnwindSafe, S: RefUnwindSafe,
impl<P, S> Send for OverlayFileSystem<P, S>where P: Send, S: Send,
impl<P, S> Sync for OverlayFileSystem<P, S>where P: Sync, S: Sync,
impl<P, S> Unpin for OverlayFileSystem<P, S>where P: Unpin, S: Unpin,
impl<P, S> UnwindSafe for OverlayFileSystem<P, S>where P: UnwindSafe, S: UnwindSafe,
Blanket Implementations§
source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.