pub struct RenderCache { /* private fields */ }Expand description
Per-message render cache keyed by message index.
The cache stores one optional entry per chat message, addressed by the
message’s position in crate::App’s message buffer. On each frame the
chat widget calls get with the current RenderCacheKey;
on a hit it reuses the cached lines, skipping expensive markdown parsing
and word-wrapping.
When messages are evicted from the front of the buffer, call
shift to keep indices aligned.
§Examples
use zeph_tui::render_cache::{RenderCache, RenderCacheKey};
let mut cache = RenderCache::default();
let key = RenderCacheKey { content_hash: 42, terminal_width: 80, tool_expanded: false, compact_tools: false, show_labels: false };
cache.put(0, key, vec![], vec![]);
assert!(cache.get(0, &key).is_some());Implementations§
Source§impl RenderCache
impl RenderCache
Sourcepub fn get(
&self,
idx: usize,
key: &RenderCacheKey,
) -> Option<(&[Line<'static>], &[MdLink])>
pub fn get( &self, idx: usize, key: &RenderCacheKey, ) -> Option<(&[Line<'static>], &[MdLink])>
Look up cached lines for message at idx with the given key.
Returns Some((lines, md_links)) on a cache hit, None on a miss or
key mismatch.
§Examples
use zeph_tui::render_cache::{RenderCache, RenderCacheKey};
let mut cache = RenderCache::default();
let key = RenderCacheKey { content_hash: 1, terminal_width: 80, tool_expanded: false, compact_tools: false, show_labels: false };
assert!(cache.get(0, &key).is_none()); // cold cacheSourcepub fn put(
&mut self,
idx: usize,
key: RenderCacheKey,
lines: Vec<Line<'static>>,
md_links: Vec<MdLink>,
)
pub fn put( &mut self, idx: usize, key: RenderCacheKey, lines: Vec<Line<'static>>, md_links: Vec<MdLink>, )
Store a rendered entry for message at idx.
Grows the internal storage as needed. An existing entry at idx is
unconditionally replaced.
§Examples
use zeph_tui::render_cache::{RenderCache, RenderCacheKey};
let mut cache = RenderCache::default();
let key = RenderCacheKey { content_hash: 7, terminal_width: 100, tool_expanded: true, compact_tools: false, show_labels: false };
cache.put(0, key, vec![], vec![]);
assert!(cache.get(0, &key).is_some());Sourcepub fn invalidate(&mut self, idx: usize)
pub fn invalidate(&mut self, idx: usize)
Invalidate the entry at idx, forcing a re-render on the next frame.
A no-op if idx is out of range.
§Examples
use zeph_tui::render_cache::{RenderCache, RenderCacheKey};
let mut cache = RenderCache::default();
let key = RenderCacheKey { content_hash: 1, terminal_width: 80, tool_expanded: false, compact_tools: false, show_labels: false };
cache.put(0, key, vec![], vec![]);
cache.invalidate(0);
assert!(cache.get(0, &key).is_none());Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Remove all cached entries.
§Examples
use zeph_tui::render_cache::{RenderCache, RenderCacheKey};
let mut cache = RenderCache::default();
let key = RenderCacheKey { content_hash: 1, terminal_width: 80, tool_expanded: false, compact_tools: false, show_labels: false };
cache.put(0, key, vec![], vec![]);
cache.clear();
assert!(cache.get(0, &key).is_none());Sourcepub fn shift(&mut self, count: usize)
pub fn shift(&mut self, count: usize)
Shift all entries left by count positions.
Called when count messages are evicted from the front of the message
buffer, so that cache index N continues to map to message index N.
If count >= the current number of entries, the cache is emptied.
§Examples
use zeph_tui::render_cache::{RenderCache, RenderCacheKey};
let mut cache = RenderCache::default();
for i in 0..3u64 {
let key = RenderCacheKey { content_hash: i, terminal_width: 80, tool_expanded: false, compact_tools: false, show_labels: false };
cache.put(i as usize, key, vec![], vec![]);
}
cache.shift(1);
// Old index 1 is now at index 0.
let key1 = RenderCacheKey { content_hash: 1, terminal_width: 80, tool_expanded: false, compact_tools: false, show_labels: false };
assert!(cache.get(0, &key1).is_some());Trait Implementations§
Source§impl Default for RenderCache
impl Default for RenderCache
Source§fn default() -> RenderCache
fn default() -> RenderCache
Auto Trait Implementations§
impl Freeze for RenderCache
impl RefUnwindSafe for RenderCache
impl Send for RenderCache
impl Sync for RenderCache
impl Unpin for RenderCache
impl UnsafeUnpin for RenderCache
impl UnwindSafe for RenderCache
Blanket Implementations§
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
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> 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>
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>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request