Struct Versioned

Source
pub struct Versioned<T>
where T: Data,
{ /* private fields */ }
Expand description

The core structure of this package, which provides synchronous read-access to the latest version and aysnchronous writes, delegated to the update task.

The struct is not Sync, but it is Send; in order to share between tasks it should be cloned and Sent. The contained data is not cloned; clones share the same backing linked list of versions and data.

Old versions are not actively purged, but will be dropped as long as there are no more instances holding that version. This means that instances that are held for a long duration without being accessed will prevent the old version from being purged. This situation should be avoided.

Implementations§

Source§

impl<T> Versioned<T>
where T: Data,

Source

pub fn from_initial(data: T) -> (Self, Quitter<T>)

Creates the Versioned from the initial data, returning both the Versioned instance and a Quitter which can be used to stop the backing update task.

Source

pub fn with_latest<U, F: FnOnce(&T) -> U>(&self, action: F) -> U

Passes a reference to the latest version of the contained data to the provided function and returns it result.

This is the mechanism for read access to the data.

Source

pub fn update( &self, update_fn: Box<dyn DataUpdater<T>>, ) -> Result<(), Box<dyn DataUpdater<T>>>

Allows the data to be upated by passing the latest version to the provided DataUpdater, and storing the result if one is provided. The update is delegated to the update task, which is also where the DataUpdater will be called.

Trait Implementations§

Source§

impl<T> Clone for Versioned<T>
where T: Data + Clone,

Source§

fn clone(&self) -> Versioned<T>

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<T> Debug for Versioned<T>
where T: Data + Debug,

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> !Freeze for Versioned<T>

§

impl<T> !RefUnwindSafe for Versioned<T>

§

impl<T> Send for Versioned<T>

§

impl<T> !Sync for Versioned<T>

§

impl<T> Unpin for Versioned<T>

§

impl<T> !UnwindSafe for Versioned<T>

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

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

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

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.