Skip to main content

JsonFileStore

Struct JsonFileStore 

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

A file-backed store that persists state across restarts.

Uses atomic file rename to prevent corruption on crash: every write serialises to a .tmp file first, then renames it over the target path.

Suitable for single-process bot operators. For multi-process or high-throughput use cases, see RocksDbStore (v0.2).

§Example

use xenith_sync::JsonFileStore;
use xenith_core::StateStore;

let store = JsonFileStore::new("/tmp/xenith-state.json")?;

Implementations§

Source§

impl JsonFileStore

Source

pub fn new(path: impl Into<PathBuf>) -> Result<Self>

Open or create a JSON file store at path.

If the file exists it is parsed on construction. If it does not exist an empty store is initialised (the file is created on the first write).

Trait Implementations§

Source§

impl StateStore for JsonFileStore

Source§

fn get<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 StateKey, ) -> Pin<Box<dyn Future<Output = Result<Option<StateValue>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Retrieve the value for key, or None if it has not been set.
Source§

fn set<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 StateKey, value: StateValue, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Insert or overwrite the value for key.
Source§

fn delete<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 StateKey, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Remove the value for key. No-op if the key does not exist.
Source§

fn list_prefix<'life0, 'life1, 'async_trait>( &'life0 self, prefix: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<StateKey>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Return all keys whose string representation starts with prefix.
Source§

fn get_metadata<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 StateKey, ) -> Pin<Box<dyn Future<Output = Result<Option<KeyMetadata>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Retrieve the KeyMetadata for key, or None if not set.
Source§

fn set_metadata<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 StateKey, meta: KeyMetadata, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Store KeyMetadata for 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.

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