Skip to main content

IdentityMap

Struct IdentityMap 

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

Identity Map for tracking unique object instances.

The map is keyed by (TypeId, pk_hash) to ensure each model type has its own namespace, and objects with the same PK return the same reference.

Implementations§

Source§

impl IdentityMap

Source

pub fn new() -> Self

Create a new empty identity map.

Source

pub fn insert<M: Model + Send + Sync + 'static>( &mut self, model: M, ) -> Arc<RwLock<M>>

Insert a model into the identity map.

If an object with the same PK already exists, returns the existing reference (the new object is ignored). Otherwise, inserts the new object and returns a reference to it.

§Returns

An Arc<RwLock<M>> pointing to the object in the map.

Source

pub fn get<M: Model + Send + Sync + 'static>( &self, pk_values: &[Value], ) -> Option<Arc<RwLock<M>>>

Get an object from the identity map by primary key.

§Returns

Some(Arc<RwLock<M>>) if found, None otherwise. The returned Arc is a clone of the stored Arc, so modifications are shared.

Source

pub fn contains<M: Model + 'static>(&self, pk_values: &[Value]) -> bool

Check if an object with the given PK exists in the map.

Source

pub fn contains_model<M: Model + 'static>(&self, model: &M) -> bool

Check if a model instance exists in the map.

Source

pub fn remove<M: Model + 'static>(&mut self, pk_values: &[Value]) -> bool

Remove an object from the identity map.

§Returns

true if the object was removed, false if it wasn’t in the map.

Source

pub fn remove_model<M: Model + 'static>(&mut self, model: &M) -> bool

Remove a model instance from the identity map.

Source

pub fn clear(&mut self)

Clear all entries from the identity map.

Source

pub fn len(&self) -> usize

Get the number of entries in the map.

Source

pub fn is_empty(&self) -> bool

Check if the map is empty.

Source

pub fn get_or_insert<M: Model + Clone + Send + Sync + 'static>( &mut self, model: M, ) -> Arc<RwLock<M>>

Get or insert a model into the identity map.

If an object with the same PK already exists, returns a reference to it. Otherwise, inserts the new object and returns a reference.

This is useful when you want to either get an existing object or insert a new one atomically.

Source

pub fn update<M: Model + Clone + Send + Sync + 'static>( &mut self, model: &M, ) -> bool

Update an object in the identity map.

If the object exists, updates it with the new values and returns true. If it doesn’t exist, returns false.

Trait Implementations§

Source§

impl Default for IdentityMap

Source§

fn default() -> IdentityMap

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

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

Source§

fn instrument(self, _span: NoopSpan) -> Self

Instruments this future with a span (no-op when disabled).
Source§

fn in_current_span(self) -> Self

Instruments this future with the current span (no-op when disabled).
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> Same for T

Source§

type Output = T

Should always be Self
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