Skip to main content

LWWRegister

Struct LWWRegister 

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

A register that resolves conflicts using “last write wins” semantics.

Each write records a timestamp, and on merge the value with the higher timestamp is kept.

§Time Injection

Timestamps must be provided by the caller. This makes the type pure and WASM-compatible. Use a logical clock or system time at the call site.

Implementations§

Source§

impl<T> LWWRegister<T>

Source

pub fn new(value: T, timestamp: u64) -> Self

Create a new register with the given initial value and timestamp.

The timestamp should be provided by the caller (e.g., from system time or a logical clock). This enables WASM compatibility.

Source

pub fn set(&mut self, value: T, timestamp: u64)

Set a new value with the given timestamp.

The timestamp should be greater than or equal to the current timestamp to ensure the new value takes precedence on merge.

Source

pub fn get(&self) -> &T

Get the current value.

Source

pub fn timestamp(&self) -> u64

Get the timestamp of the last write.

Trait Implementations§

Source§

impl<T: Clone> Clone for LWWRegister<T>

Source§

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

Returns a duplicate 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<T: Debug> Debug for LWWRegister<T>

Source§

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

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

impl<T: Default> Default for LWWRegister<T>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de, T> Deserialize<'de> for LWWRegister<T>
where T: Deserialize<'de>,

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<T: Clone> Merge for LWWRegister<T>

Source§

fn merge(&mut self, other: &Self)

Merge another register into this one.

The value with the higher timestamp wins. If timestamps are equal, the other value wins (arbitrary but deterministic).

Source§

impl<T: PartialEq> PartialEq for LWWRegister<T>

Source§

fn eq(&self, other: &LWWRegister<T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T> Serialize for LWWRegister<T>
where T: Serialize,

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<T> StructuralPartialEq for LWWRegister<T>

Auto Trait Implementations§

§

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

§

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

§

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

§

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

§

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

§

impl<T> UnwindSafe for LWWRegister<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> 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> 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.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,