Skip to main content

Timeline

Struct Timeline 

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

Labelled ranges on a numeric scale, such as the steps of a build in seconds: a Gantt strip when every range has its own row, a timeline of lanes when ranges share a row.

  • Each row is labelled on the left. Ranges on the same row that overlap are stacked onto extra lines under it, so none hides another.
  • Ranges are drawn █, or ▓ when one follows another on the same line (# and = in ASCII), in their row’s chart.series.N colour. A range covers every column whose centre value is inside it, and at least one.
  • Each range’s length is written after it when there is room before the next one (durations, on by default), so the chart reads without the axis.
  • milestone marks a point with ◆ (*) on a line under the ranges, its label beside it when it fits.
  • The axis runs along the bottom. Its labels sit on evenly spaced columns and name each column’s exact value, as on a LineChart; unit is written after each value (20s).
  • Compression: when the range is wider than the plot, so that the shortest range would get less than a column of its own, idle gaps longer than four times the shortest range, and longer than three columns’ worth of the uncut scale, are cut out (compress, on by default). Each cut is three columns with ≈ (~) on the axis, and the axis labels each stretch at its start and end.
  • It fills the width given, or width. Given less, the row labels are cut so the plot keeps 8 columns.
use rich::Console;
use rich_ext::chart::Timeline;

let console = Console::builder().width(40).color_system(None).build();
let build = Timeline::new()
    .span("fetch", 0.0, 4.0)
    .span("compile", 4.0, 26.0)
    .span("test", 12.0, 30.0)
    .span("test", 20.0, 34.0)
    .milestone("ship", 36.0)
    .unit("s")
    .width(40);
assert_eq!(
    console.render_export(&build),
    concat!(
        "fetch   ████ 4s                         \n",
        "compile     █████████████████ 22s       \n",
        "test              ███████████████ 18s   \n",
        "                        ████████████ 14s\n",
        "                                ship ◆  \n",
        "        ┬───────┬───────┬───────┬───────\n",
        "        0s     10s     20s     30s      \n",
    )
);

Implementations§

Source§

impl Timeline

Source

pub fn new() -> Self

An empty timeline; add ranges with span.

Source

pub fn span(self, row: impl Into<String>, start: f64, end: f64) -> Self

Add a range on row row from start to end.

Source

pub fn push(self, span: Span) -> Self

Add a Span built with its own style.

Source

pub fn milestone(self, label: impl Into<String>, at: f64) -> Self

Add a milestone at at.

Source

pub fn range(self, min: f64, max: f64) -> Self

Fix the scale instead of fitting it to the ranges (no compression).

Source

pub fn charset(self, charset: Charset) -> Self

Glyphs to draw with: Charset::Ascii asks for ASCII; anything else draws blocks (ASCII on an ASCII-only console).

Source

pub fn format(self, format: ValueFormat) -> Self

How values are written (default ValueFormat::Compact).

Source

pub fn unit(self, unit: impl Into<String>) -> Self

Written after every value on the axis and every length, such as s.

Source

pub fn compress(self, compress: bool) -> Self

Cut long idle gaps when the range is wider than the plot (default on).

Source

pub fn durations(self, show: bool) -> Self

Write each range’s length after it (default on).

Source

pub fn width(self, width: usize) -> Self

Fix the width (default: the width given).

Source

pub fn rows(&self) -> Vec<&str>

The row labels, in the order they first appear.

Trait Implementations§

Source§

impl AccessibleText for Timeline

Timeline, 3 rows, 4 ranges, 1 milestone, from 0s to 95s, then each range (compile from 0s to 12s, 12s), twenty at most, and each milestone (Milestone release at 90s).

Source§

fn accessible_text(&self, _width: usize) -> String

The content as plain lines, laid out for width where layout matters.
Source§

impl Clone for Timeline

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Timeline

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Timeline

Source§

fn default() -> Self

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

impl Draw for Timeline

Source§

fn draw( &self, console: &Console, options: &ConsoleOptions, screen: &mut Screen, rect: Rect, )

Draw into rect of screen, rendered with options (its width and height are the rectangle’s): the cells screen.write_lines(rect, &console.render_lines(self, options, false)) would give.
Source§

impl PartialEq for Timeline

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Renderable for Timeline

Source§

fn rich_render( &self, console: &Console, options: &ConsoleOptions, ) -> Vec<Segment>

Source§

fn measure(&self, _console: &Console, options: &ConsoleOptions) -> Measurement

The (minimum, maximum) cell width this renderable wants. Port of __rich_measure__. The default is what upstream’s Measurement.get returns for a renderable without one: anything from nothing to the whole width, (0, max_width).
Source§

fn fit_to_measurement(&self) -> bool

Whether a top-level Console::print shrinks this renderable to its measured width. Upstream renders every top-level renderable at the full console width, so the default is false; an extension may opt in.
Source§

fn vertical(&self) -> Option<VerticalAlign>

The vertical alignment a Table cell holding this renderable uses in place of its column’s. Upstream reads getattr(renderable, "vertical", None); Align sets it.
Source§

fn print_end_line(&self, _options: &ConsoleOptions) -> bool

Whether a top-level print ends this renderable’s last line. This port’s renderables separate lines, where upstream’s end each line with "\n", so a print adds the final line break. A renderable whose upstream output stops without one (Screen, LiveRender, a Rule whose end has no newline) returns false, and the next output continues its last line. options are the print’s options.
Source§

impl StructuralPartialEq for Timeline

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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: 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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