Struct tor_persist::FsStateMgr

source ·
pub struct FsStateMgr { /* private fields */ }
Available on non-WebAssembly only.
Expand description

Implementation of StateMgr that stores state as JSON files on disk.

§Locking

This manager uses a lock file to determine whether it’s allowed to write to the disk. Only one process should write to the disk at a time, though any number may read from the disk.

By default, every FsStateMgr starts out unlocked, and only able to read. Use FsStateMgr::try_lock() to lock it.

§Limitations

  1. This manager only accepts objects that can be serialized as JSON documents. Some types (like maps with non-string keys) can’t be serialized as JSON.

  2. This manager normalizes keys to an fs-safe format before saving data with them. This keeps you from accidentally creating or reading files elsewhere in the filesystem, but it doesn’t prevent collisions when two keys collapse to the same fs-safe filename. Therefore, you should probably only use ascii keys that are fs-safe on all systems.

NEVER use user-controlled or remote-controlled data for your keys.

Implementations§

source§

impl FsStateMgr

source

pub fn from_path_and_mistrust<P: AsRef<Path>>( path: P, mistrust: &Mistrust ) -> Result<Self, Error>

Construct a new FsStateMgr to store data in path.

This function will try to create path if it does not already exist.

All files must be “private” according to the rules specified in mistrust.

source

pub fn path(&self) -> &Path

Return the top-level directory for this storage manager.

(This is the same directory passed to FsStateMgr::from_path_and_mistrust.)

Trait Implementations§

source§

impl Clone for FsStateMgr

source§

fn clone(&self) -> FsStateMgr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for FsStateMgr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl StateMgr for FsStateMgr

source§

fn can_store(&self) -> bool

Return true if this is a read-write state manager. Read more
source§

fn try_lock(&self) -> Result<LockStatus, Error>

Try to become a read-write state manager if possible, without blocking. Read more
source§

fn unlock(&self) -> Result<(), Error>

Release any locks held and become a read-only state manager again. If no locks were held, do nothing.
source§

fn load<D>(&self, key: &str) -> Result<Option<D>, Error>

Try to load the object with key key from the store. Read more
source§

fn store<S>(&self, key: &str, val: &S) -> Result<(), Error>
where S: Serialize,

Try to save val with key key in the store. Read more
source§

fn create_handle<T>(self, key: impl Into<String>) -> DynStorageHandle<T>
where Self: Send + Sync + Sized + 'static, T: Serialize + DeserializeOwned + 'static,

Make a new StorageHandle to store values of particular type at a particular key.

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

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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> 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> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

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

§

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>,

§

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

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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