AtomicDir

Struct AtomicDir 

Source
pub struct AtomicDir<T>(pub T);
Expand description

A wrapper type that enables atomic writes to directories.

When writing, it first writes to a temporary directory and then renames it to the target directory, ensuring that the target directory is never left in a partially updated state.

If the write fails, the original directory remains unchanged, and the temporary directory is cleaned up, before the error is propagated.

The Vfs used for writing must support temporary directories via the VfsSupportsTemporaryDirectories trait (or its async counterpart VfsSupportsTemporaryDirectoriesAsync when using async writes).

Tuple Fields§

§0: T

Trait Implementations§

Source§

impl<'vfs, T, Vfs: Vfs<'vfs> + 'vfs> ReadFrom<'vfs, Vfs> for AtomicDir<T>
where T: ReadFrom<'vfs, Vfs>,

Source§

fn read_from(path: &Vfs::Path, vfs: Pin<&'vfs Vfs>) -> VfsResult<Self, Vfs>

Reads the structure from the specified path, which can be either a file or a directory.
Source§

impl<'vfs, T, Vfs: VfsAsync + 'vfs> ReadFromAsync<'vfs, Vfs> for AtomicDir<T>
where T: ReadFromAsync<'vfs, Vfs> + Send + 'static,

Source§

type Future = Pin<Box<dyn Future<Output = Result<AtomicDir<T>, Error<<<Vfs as VfsCore>::Path as PathType>::OwnedPath>>> + Send + 'vfs>>

Available on crate feature async only.
The future type returned by the async read function.
Source§

fn read_from_async( path: <Vfs::Path as PathType>::OwnedPath, vfs: Pin<&'vfs Vfs>, ) -> Self::Future

Available on crate feature async only.
Asynchronously reads the structure from the specified path, which can be either a file or a directory.
Source§

impl<'vfs, T, Vfs> WriteTo<'vfs, Vfs> for AtomicDir<T>
where T: WriteTo<'vfs, Vfs>, Vfs: VfsSupportsTemporaryDirectories<'vfs> + Vfs<'vfs> + WriteSupportingVfs<'vfs> + 'vfs,

Source§

fn write_to(&self, path: &Vfs::Path, vfs: Pin<&'vfs Vfs>) -> VfsResult<(), Vfs>

Writes the structure to the specified path.
Source§

impl<'vfs, T, Vfs> WriteToAsync<'vfs, Vfs> for AtomicDir<T>
where T: WriteToAsync<'vfs, Vfs> + Send + 'static, Vfs: VfsSupportsTemporaryDirectoriesAsync<'vfs> + VfsAsync + Send + WriteSupportingVfsAsync + 'vfs,

Available on crate feature async only.
Source§

type Future = Pin<Box<dyn Future<Output = Result<(), Error<<<Vfs as VfsCore>::Path as PathType>::OwnedPath>>> + Send + 'vfs>>

The future type returned by the async write function.
Source§

fn write_to_async( self, path: <Vfs::Path as PathType>::OwnedPath, vfs: Pin<&'vfs Vfs>, ) -> Self::Future

Asynchronously writes the structure to the specified path.
Source§

impl<'vfs, T, Vfs> WriteToAsyncRef<'vfs, Vfs> for AtomicDir<T>
where T: WriteToAsyncRef<'vfs, Vfs> + Sync + 'static, for<'r> <T as WriteToAsyncRef<'vfs, Vfs>>::Future<'r>: Future<Output = VfsResult<(), Vfs>> + Unpin + Send + 'r, for<'r> Vfs: VfsSupportsTemporaryDirectoriesAsync<'r> + VfsAsync + Send + 'static + WriteSupportingVfsAsync + 'vfs,

Available on crate feature async only.
Source§

type Future<'r> = AtomicDirWriteToAsyncRefFuture<'r, 'vfs, T, Vfs> where Self: 'r, 'vfs: 'r

The future type returned by the async write function.
Source§

fn write_to_async_ref<'r>( &'r self, path: <Vfs::Path as PathType>::OwnedPath, vfs: Pin<&'r Vfs>, ) -> Self::Future<'r>
where 'vfs: 'r,

Asynchronously writes the structure to the specified path.

Auto Trait Implementations§

§

impl<T> Freeze for AtomicDir<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for AtomicDir<T>
where T: RefUnwindSafe,

§

impl<T> Send for AtomicDir<T>
where T: Send,

§

impl<T> Sync for AtomicDir<T>
where T: Sync,

§

impl<T> Unpin for AtomicDir<T>
where T: Unpin,

§

impl<T> UnwindSafe for AtomicDir<T>
where T: UnwindSafe,

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<T> DirStructureItem for T

Source§

fn read(path: impl AsRef<<FsVfs as VfsCore>::Path>) -> VfsResult<Self, FsVfs>
where Self: ReadFrom<'static, FsVfs> + Sized,

Uses the ReadFrom implementation to read the structure from disk, from the specified path.
Source§

fn write<'a, 'vfs: 'a>( &'a self, path: impl AsRef<<FsVfs as VfsCore>::Path>, ) -> VfsResult<(), FsVfs>
where Self: WriteTo<'vfs, FsVfs>,

Uses the WriteTo implementation to write the structure to disk at the specified path.
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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
Source§

impl<T> ErasedDestructor for T
where T: 'static,