pub struct RenderCache {
pub chat: ChatState,
pub wrapped_line_cache: FxHashMap<u64, Vec<Line<'static>>>,
pub theme: Theme,
pub hostname: String,
pub username: String,
pub version: String,
/* private fields */
}Expand description
Transient render-layer state that lives across frames but isn’t
reducer state. Owned by app::run_interactive; passed as &mut
to render() per frame.
Contents are pure memoization + UI affordances (scroll position,
wrapped-line cache, theme choice). Nothing here affects what the
reducer sees or what ends up on disk — the cache can be dropped
and rebuilt from &State at any time.
Fields§
§chat: ChatState§wrapped_line_cache: FxHashMap<u64, Vec<Line<'static>>>Per-message render cache: (content, theme, width) hash → fully wrapped,
role-prefixed assistant lines, so committed messages aren’t re-parsed or
re-wrapped every frame (#134).
theme: Theme§hostname: StringHost + user for the status bar’s user@host:cwd line, injected once at
startup so StatusWidget::render doesn’t hit the environment on every
frame (#55). Process-constant, so caching here is exact. The shell reads
the environment and passes the result to RenderCache::new; render
itself never does, which is what keeps this module a pure function of
its inputs.
username: String§version: StringApp version for the status footer. Defaults to the compile-time crate version; the snapshot suite pins it (like hostname/username) so pinned frames survive release bumps.
Implementations§
Source§impl RenderCache
impl RenderCache
Sourcepub fn new(hostname: String, username: String) -> Self
pub fn new(hostname: String, username: String) -> Self
hostname and username are parameters rather than environment reads
because this module is covered by the layering guard: a std::env call
anywhere under src/render is impurity in a tree that is supposed to be
a pure function of State. The shell resolves them once at startup
(app::run::host_identity); the snapshot and bench rigs pass pinned
literals, which is how their frames stay byte-stable across machines.
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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>
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>
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)
&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)
&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> 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> 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 more