pub struct ConversationCache { /* private fields */ }Expand description
Sharded LRU cache for ConversationView to reduce lock contention.
Caching conversation views avoids:
- Database queries (conversation + messages)
- JSON parsing (metadata_json, extra_json)
This is particularly beneficial for:
- TUI scrolling (repeated access to same results)
- Detail view expansion (view -> expand -> view pattern)
Implementations§
Source§impl ConversationCache
impl ConversationCache
Sourcepub fn new(capacity_per_shard: usize) -> Self
pub fn new(capacity_per_shard: usize) -> Self
Create a new cache with the specified capacity per shard.
Sourcepub fn get(
&self,
source_id: Option<&str>,
source_path: &str,
) -> Option<Arc<ConversationView>>
pub fn get( &self, source_id: Option<&str>, source_path: &str, ) -> Option<Arc<ConversationView>>
Get a cached conversation view by source identity.
Sourcepub fn get_scoped(
&self,
cache_scope: &str,
source_id: Option<&str>,
source_path: &str,
) -> Option<Arc<ConversationView>>
pub fn get_scoped( &self, cache_scope: &str, source_id: Option<&str>, source_path: &str, ) -> Option<Arc<ConversationView>>
Get a cached conversation view scoped to a specific database identity.
Sourcepub fn insert(
&self,
source_id: Option<&str>,
source_path: &str,
view: ConversationView,
) -> Arc<ConversationView> ⓘ
pub fn insert( &self, source_id: Option<&str>, source_path: &str, view: ConversationView, ) -> Arc<ConversationView> ⓘ
Insert a conversation view into the cache.
Sourcepub fn insert_scoped(
&self,
cache_scope: &str,
source_id: Option<&str>,
source_path: &str,
view: ConversationView,
) -> Arc<ConversationView> ⓘ
pub fn insert_scoped( &self, cache_scope: &str, source_id: Option<&str>, source_path: &str, view: ConversationView, ) -> Arc<ConversationView> ⓘ
Insert a conversation view into the cache scoped to a specific database identity.
Sourcepub fn invalidate(&self, source_id: Option<&str>, source_path: &str)
pub fn invalidate(&self, source_id: Option<&str>, source_path: &str)
Invalidate a specific cache entry by source identity.
Sourcepub fn invalidate_scoped(
&self,
cache_scope: &str,
source_id: Option<&str>,
source_path: &str,
)
pub fn invalidate_scoped( &self, cache_scope: &str, source_id: Option<&str>, source_path: &str, )
Invalidate a specific cache entry scoped to a specific database identity.
Sourcepub fn invalidate_all(&self)
pub fn invalidate_all(&self)
Invalidate all cache entries.
Sourcepub fn stats(&self) -> &CacheStats
pub fn stats(&self) -> &CacheStats
Get cache statistics.
Auto Trait Implementations§
impl !Freeze for ConversationCache
impl !RefUnwindSafe for ConversationCache
impl Send for ConversationCache
impl Sync for ConversationCache
impl Unpin for ConversationCache
impl UnsafeUnpin for ConversationCache
impl UnwindSafe for ConversationCache
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Converts
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Converts
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Converts
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Converts
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, _span: NoopSpan) -> Self
fn instrument(self, _span: NoopSpan) -> Self
Instruments this future with a span (no-op when disabled).
Source§fn in_current_span(self) -> Self
fn in_current_span(self) -> Self
Instruments this future with the current span (no-op when disabled).
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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