pub struct StdFs;Expand description
ReadStorage over the process filesystem (std::fs).
The reference adapter, and the one ChangeSet is
tuned for: it implements Storage too, and reports
Capabilities::LOCAL_FS.
The traits are async so that genuinely async backends (network, OPFS) fit;
this adapter’s futures are immediately ready, so any executor — including
the dependency-free crate::exec::block_on — drives them to completion
in a single poll.
Trait Implementations§
impl Copy for StdFs
Source§impl ReadStorage for StdFs
impl ReadStorage for StdFs
Source§async fn read(&self, path: &Path) -> Result<Vec<u8>, Error>
async fn read(&self, path: &Path) -> Result<Vec<u8>, Error>
Read the entire contents of a file as bytes. Mirrors
std::fs::read.Source§async fn read_to_string(&self, path: &Path) -> Result<String, Error>
async fn read_to_string(&self, path: &Path) -> Result<String, Error>
Read the entire contents of a file as a string. Mirrors
std::fs::read_to_string.Source§async fn read_dir(&self, path: &Path) -> Result<Vec<DirEntry>, Error>
async fn read_dir(&self, path: &Path) -> Result<Vec<DirEntry>, Error>
Return the entries in a directory (non-recursive). Mirrors
std::fs::read_dir, but yields a Vec since async iterators are not
yet stable.Source§async fn metadata(&self, path: &Path) -> Result<Metadata, Error>
async fn metadata(&self, path: &Path) -> Result<Metadata, Error>
Return metadata about the entry at
path. Mirrors
std::fs::metadata; follows symlinks.Source§impl Storage for StdFs
impl Storage for StdFs
Source§async fn write(&self, path: &Path, contents: &[u8]) -> Result<(), Error>
async fn write(&self, path: &Path, contents: &[u8]) -> Result<(), Error>
Write a file, replacing it if it already exists. Mirrors
std::fs::write.Source§async fn create_new(&self, path: &Path, contents: &[u8]) -> Result<(), Error>
async fn create_new(&self, path: &Path, contents: &[u8]) -> Result<(), Error>
Create a file that must not already exist, and write
contents to it.
Mirrors std::fs::File::create_new followed by a full write. Read moreSource§async fn create_dir_all(&self, path: &Path) -> Result<(), Error>
async fn create_dir_all(&self, path: &Path) -> Result<(), Error>
Create a directory and all missing parents. Mirrors
std::fs::create_dir_all.Source§async fn remove_file(&self, path: &Path) -> Result<(), Error>
async fn remove_file(&self, path: &Path) -> Result<(), Error>
Remove a regular file. Mirrors
std::fs::remove_file.Source§async fn remove_dir_all(&self, path: &Path) -> Result<(), Error>
async fn remove_dir_all(&self, path: &Path) -> Result<(), Error>
Recursively remove a directory and its contents. Mirrors
std::fs::remove_dir_all.Source§async fn rename(&self, from: &Path, to: &Path) -> Result<(), Error>
async fn rename(&self, from: &Path, to: &Path) -> Result<(), Error>
Rename or move a file or directory. Mirrors
std::fs::rename — and
the load-bearing half of the mirror is that an occupied destination
file is replaced, as std::fs::rename replaces one on every platform
this crate targets. The default write_atomic
publishes by renaming a staged sibling over the target, so a backend
whose rename refuses an occupied file cannot take that default and must
override write_atomic with its own atomic replacement. A directory
destination is another matter — std::fs::rename itself is
platform-divergent there — and nothing in this crate renames onto one.Source§async fn set_executable(
&self,
path: &Path,
executable: bool,
) -> Result<(), Error>
async fn set_executable( &self, path: &Path, executable: bool, ) -> Result<(), Error>
Make the file at
path runnable, or not. One bit, not a mode: nothing
else about the file changes. Read moreSource§async fn copy_permissions(&self, from: &Path, to: &Path) -> Result<(), Error>
async fn copy_permissions(&self, from: &Path, to: &Path) -> Result<(), Error>
Give
to the same access permissions from has. A from that does not
exist is not an error — there is no prior state to carry over, so the
call has nothing to do. Read moreSource§fn capabilities(&self) -> Capabilities
fn capabilities(&self) -> Capabilities
What durability guarantees this backend can make. Defaults to
Capabilities::NONE — a backend promises a guarantee only by saying so,
so an adapter that forgets to override this degrades to the most defensive
path rather than to a false promise.Source§fn replace(
&self,
path: &Path,
contents: &[u8],
) -> impl Future<Output = Result<(), Error>>
fn replace( &self, path: &Path, contents: &[u8], ) -> impl Future<Output = Result<(), Error>>
Replace
path’s contents with contents atomically — and only
atomically: no observer ever sees a splice of old and new bytes, but
nothing here outlives a power cut until the caller flushes it. The
atomic half of write_atomic, split out so
that a protocol landing many replacements can batch one drain instead
of paying one per file — which is exactly what
ChangeSet and
OrderedBatch do, settling the whole set’s
flush debt once before the state is certified. Read moreSource§fn write_atomic(
&self,
path: &Path,
contents: &[u8],
) -> impl Future<Output = Result<(), Error>>
fn write_atomic( &self, path: &Path, contents: &[u8], ) -> impl Future<Output = Result<(), Error>>
Replace
path’s contents with contents atomically and durably: no
observer — concurrent reader or post-crash survivor — ever sees a splice
of old and new bytes, and once this returns the new contents outlive a
power loss. Read moreAuto Trait Implementations§
impl Freeze for StdFs
impl RefUnwindSafe for StdFs
impl Send for StdFs
impl Sync for StdFs
impl Unpin for StdFs
impl UnsafeUnpin for StdFs
impl UnwindSafe for StdFs
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more