pub struct IterationBuffer {
pub number: u32,
pub lines: Arc<Mutex<Vec<Line<'static>>>>,
pub scroll_offset: usize,
pub following_bottom: bool,
pub hat_display: Option<String>,
pub backend: Option<String>,
pub started_at: Option<Instant>,
pub elapsed: Option<Duration>,
}Expand description
Stores formatted output content for a single Ralph iteration. Each iteration has its own buffer with independent scroll state.
The lines field is wrapped in Arc<Mutex<>> to allow sharing
with stream handlers during execution, enabling real-time streaming
to the TUI instead of batch transfer after execution completes.
Fields§
§number: u32Iteration number (1-indexed for display)
lines: Arc<Mutex<Vec<Line<'static>>>>Formatted lines of output (shared for streaming)
scroll_offset: usizeScroll position within this buffer
following_bottom: boolWhether to auto-scroll to bottom as new content arrives. Starts true, becomes false when user scrolls up, restored when user scrolls to bottom (G key) or manually scrolls down to reach bottom.
hat_display: Option<String>Hat display name (emoji + name) for this iteration.
backend: Option<String>Backend used for this iteration (e.g., “claude”, “kiro”).
started_at: Option<Instant>When this iteration started (for elapsed time calculation).
elapsed: Option<Duration>Frozen elapsed duration for this iteration (set when completed).
Implementations§
Source§impl IterationBuffer
impl IterationBuffer
Sourcepub fn lines_handle(&self) -> Arc<Mutex<Vec<Line<'static>>>>
pub fn lines_handle(&self) -> Arc<Mutex<Vec<Line<'static>>>>
Returns a shared handle to the lines buffer for streaming.
This allows stream handlers to write directly to the buffer, enabling real-time streaming to the TUI.
Sourcepub fn append_line(&mut self, line: Line<'static>)
pub fn append_line(&mut self, line: Line<'static>)
Appends a line to the buffer.
Sourcepub fn line_count(&self) -> usize
pub fn line_count(&self) -> usize
Returns the total number of lines in the buffer.
Sourcepub fn visible_lines(&self, viewport_height: usize) -> Vec<Line<'static>>
pub fn visible_lines(&self, viewport_height: usize) -> Vec<Line<'static>>
Returns a clone of the visible lines based on scroll offset and viewport height.
Note: Returns owned Vec instead of slice due to interior mutability.
Sourcepub fn scroll_up(&mut self)
pub fn scroll_up(&mut self)
Scrolls up by one line. Disables auto-scroll since user is moving away from bottom.
Sourcepub fn scroll_down(&mut self, viewport_height: usize)
pub fn scroll_down(&mut self, viewport_height: usize)
Scrolls down by one line, respecting the viewport bounds. Re-enables auto-scroll if user reaches the bottom.
Sourcepub fn scroll_top(&mut self)
pub fn scroll_top(&mut self)
Scrolls to the top of the buffer. Disables auto-scroll since user is moving away from bottom.
Sourcepub fn scroll_bottom(&mut self, viewport_height: usize)
pub fn scroll_bottom(&mut self, viewport_height: usize)
Scrolls to the bottom of the buffer. Re-enables auto-scroll since user explicitly went to bottom.
Auto Trait Implementations§
impl Freeze for IterationBuffer
impl RefUnwindSafe for IterationBuffer
impl Send for IterationBuffer
impl Sync for IterationBuffer
impl Unpin for IterationBuffer
impl UnwindSafe for IterationBuffer
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 more