Skip to main content

VirtualFs

Struct VirtualFs 

Source
pub struct VirtualFs { /* private fields */ }
Expand description

Copy-on-write filesystem over one immutable snapshot.

Implementations§

Source§

impl VirtualFs

Source

pub fn new(base: BaseSnapshot) -> VirtualFs

Begin a new isolated virtual transaction.

Source

pub fn base_node_count(&self) -> usize

Return the number of base manifest nodes, including the virtual root.

Source

pub fn with_effect_origin<T>( &mut self, origin: EffectOrigin, operation: impl FnOnce(&mut VirtualFs) -> T, ) -> T

Run an operation while attributing every emitted effect to origin.

Adapters use this narrow scope to preserve the typed source of observations without duplicating filesystem semantics. Nested scopes restore the previous origin when the operation returns.

Source

pub fn base_snapshot_id(&self) -> SnapshotId

Return the immutable base snapshot identity.

Source

pub fn exists(&mut self, path: &VPath) -> bool

Test path existence and record the metadata dependency.

Source

pub fn metadata(&mut self, path: &VPath) -> Result<NodeState, VfsError>

Read virtual metadata without following symbolic links.

§Errors

Returns VfsError::NotFound when path is absent.

Source

pub fn read(&mut self, path: &VPath) -> Result<Vec<u8>, VfsError>

Read regular-file bytes from virtual state.

§Errors

Returns an error for absent paths, non-files, stale lazy content, or blob-store verification failures.

Read an opaque symbolic-link target without following it.

§Errors

Returns an error for absent paths, non-links, stale lazy content, or blob errors.

Source

pub fn read_dir(&mut self, path: &VPath) -> Result<Vec<VPath>, VfsError>

List immediate child paths in canonical order.

§Errors

Returns an error when path is absent or not a directory.

Source

pub fn write(&mut self, path: &VPath, bytes: &[u8]) -> Result<(), VfsError>

Create or replace a regular file in the overlay.

§Errors

Returns an error when the parent is absent/non-directory, the target is a directory/link, or immutable blob storage fails.

Source

pub fn append(&mut self, path: &VPath, suffix: &[u8]) -> Result<(), VfsError>

Append bytes to a regular file using the same read/write semantics.

§Errors

Returns the same errors as Self::read or Self::write.

Source

pub fn mkdir(&mut self, path: &VPath, mode: u32) -> Result<(), VfsError>

Create one empty directory.

§Errors

Returns an error when the path exists or its parent is unavailable.

Delete one regular file or opaque symbolic link.

§Errors

Returns an error when the path is absent or is a directory/root.

Source

pub fn rmdir(&mut self, path: &VPath) -> Result<(), VfsError>

Delete one empty directory.

§Errors

Returns an error when the path is absent, non-directory, non-empty, or root.

Source

pub fn remove_tree(&mut self, path: &VPath) -> Result<(), VfsError>

Recursively delete a virtual subtree while expanding every affected write.

§Errors

Returns an error when the root path is absent or targets the virtual root.

Source

pub fn rename(&mut self, from: &VPath, to: &VPath) -> Result<(), VfsError>

Move a file, link, or directory subtree without touching the host.

Existing non-directory destinations are replaced. A directory may replace only an empty directory. Symlinks are moved as opaque nodes and never followed.

§Errors

Returns an error for root/overlapping moves, absent sources, invalid parents, or incompatible/non-empty destinations.

Source

pub fn canonical_diff(&self) -> Result<CanonicalDiff, VfsError>

Produce the exact path-ordered diff between base and final virtual state.

Descendant closure is expanded for subtree tombstones, so a recursive delete is never represented as a misleading one-path change.

§Errors

Returns an error if changed lazy content cannot be captured and verified.

Source

pub fn effects(&self) -> &[EffectEvent]

Return the observed effect ledger.

This excludes host-only evidence capture.

Source

pub fn capture_before_content<'a>( &self, paths: impl IntoIterator<Item = &'a VPath>, maximum: usize, ) -> Result<(), VfsError>

Capture bounded base content before finalizing a reviewable transaction.

The trusted caller must authorize content reads for every supplied path. Existing read/write observations and guest effects are not modified. Call canonical_diff afterwards to bind any newly materialized before identities. Paths exceeding the remaining byte budget retain their lazy stamp.

§Errors

Returns an error if base content changed during capture or cannot be read.

Source

pub fn read_set(&self) -> &BTreeMap<VPath, ReadObservation>

Return base dependencies observed by virtual execution.

Source

pub fn write_set(&self) -> &BTreeMap<VPath, WritePrecondition>

Return base preconditions for every virtual write.

Source

pub fn metrics(&self) -> VfsMetrics

Return bounded transaction-local size metrics.

Source

pub fn materialized_final_state( &self, ) -> Result<BTreeMap<VPath, NodeState>, VfsError>

Materialize final virtual state for verification/test harnesses.

This intentionally scans the full snapshot and is not used by transaction hot paths; production decisions use Self::canonical_diff.

§Errors

Returns an error when visible lazy content cannot be verified.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.