Struct File

Source
pub struct File<T> { /* private fields */ }
Expand description

An implementation of Persist based on an atomically-updated file at a given path. An exclusive lock is taken using flock(2) to ensure that concurrent updates cannot happen, and writes are saved to a staging file before being moved over the old file, an operation that is atomic on all Unixes.

Implementations§

Source§

impl<T: Serialize + DeserializeOwned> File<T>

Source

pub fn new(path: &Path, value: T) -> Result<Self, Error>

Creates a new persistent file at path containing value.

Source

pub fn read(path: &Path) -> Result<Self, Error>

Reads the value from a file at path, returning an error if it does not exist.

Source

pub fn read_or_create( path: &Path, value: impl FnOnce() -> Result<T, Error>, ) -> Result<Self, Error>

Reads the value from a file at path, calling the value function to create it if it does not exist. If it does exist, value will not be called.

Trait Implementations§

Source§

impl<T> Deref for File<T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &T

Dereferences the value.
Source§

impl<T> DerefMut for File<T>

Source§

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

Mutably dereferences the value.
Source§

impl<T: Serialize + DeserializeOwned + Send> Persist for File<T>

Source§

async fn persist(&mut self) -> Result<(), Error>

Writes the value to disk.

The contents of the file need to be over-written completely, so a temporary file is created as a backup in case a crash occurs while writing to disk.

The temporary file is then renamed to the original filename. If serialization or writing to disk fails, the temporary file is deleted.

Source§

fn into_value(self) -> T

Takes the value out, releasing the lock on the persistent file.

Source§

type Error = Error

Source§

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

Gets a mutable reference to the value. This is not expressed as a DerefMut bound because it is discouraged to use this function! Instead, use mutate.

Auto Trait Implementations§

§

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

§

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

§

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

§

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

§

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

§

impl<T> UnwindSafe for File<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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> PersistExt for T
where T: Persist,

Source§

async fn mutate<R>( &mut self, mutation: impl FnOnce(&mut <T as Deref>::Target) -> R + Send, ) -> Result<R, <T as Persist>::Error>

Applies a mutation to the value, persisting when done.
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more