ChartChange
ChartChange — change notifications and stable series identifiers for chart collections.
Public types
| Kind | Name |
|---|---|
struct | SeriesId — Opaque identifier for a series in a ChartModel |
enum | ChartChange — Describes a mutation to a chart's series or point data |
Detailed description
SeriesId is an opaque, stable handle for a series in a crate::ChartModel.
Because ChartModel is backed by a slotmap, SeriesId values survive arbitrary
series insertions, removals, and reorders — only removing the series itself
invalidates it. ChartChange describes exactly what mutated (at the series
level or the point level within a series) so that projections
(ChartWindow, ChartAggregate) and consumers (ChartSelection) can refresh
or adjust incrementally instead of rebuilding from scratch.
Consumers typically receive ChartChange values through an observer
registered via crate::ChartModel::observe_changes, which fires
synchronously (before the registering call returns) after each mutation.
// ChartModel::observe_changes returns an ObserverHandle whose drop
// unregisters the callback — keep it alive for the observer's lifetime.
use teksilo_data::{ChartModel, ChartChange};
let model: ChartModel<String> = ChartModel::new();
let _handle = model.observe_changes(|change| {
println!("{change:?}");
});
model.add_series("Revenue");
// prints: SeriesInserted { index: 0, series: SeriesId(...) }
API reference
📖 Full rustdoc API for this module
pub struct SeriesId
Import: use teksilo::data::SeriesId;
Opaque identifier for a series in a ChartModel.
SeriesId values are stable across mutations — inserting or removing
other series does not invalidate existing SeriesId handles (they are
SlotMap keys).
#![allow(unused)] fn main() { pub struct SeriesId(slotmap::DefaultKey); }
pub enum ChartChange
Import: use teksilo::data::ChartChange;
Describes a mutation to a chart's series or point data. Emitted by
ChartModel<T> automatically.
#![allow(unused)] fn main() { pub enum ChartChange { /* variants */ } }
Variants
SeriesInserted{ index: usize, series: SeriesId }— A series was inserted at the given index.SeriesRemoved{ series: SeriesId }— A series (and all of its points) was removed.SeriesMoved{ series: SeriesId, from: usize, to: usize }— A series was moved to a new position among its siblings.SeriesRenamed{ series: SeriesId }— A series' display name changed.SeriesColorChanged{ series: SeriesId }— A series' explicit color changed (set or cleared). Bumpscrate::ChartModel::style_versionrather thancrate::ChartModel::structure_version.SeriesPatternChanged{ series: SeriesId }— A series' explicitSeriesPatternchanged (set or cleared). Paint-only, likeSeriesColorChanged: it bumpscrate::ChartModel::style_version, notstructure_version.SeriesVisibilityChanged{ series: SeriesId }— A series' visibility flag changed.PointsInserted{ series: SeriesId, range: std::ops::Range<usize> }— Points were inserted;rangeholds the indices of the newly inserted points withinseries.PointsRemoved{ series: SeriesId, range: std::ops::Range<usize> }— Points were removed;rangeholds the indices they occupied before removal withinseries.PointUpdated{ series: SeriesId, index: usize }— A single point's data changed in place without any structural shift.SeriesDataReplaced{ series: SeriesId }— A series' entire point list was replaced; consumers must discard cached state for that series and rebuild it.Reset— The entire chart was replaced. Consumers should discard all state and rebuild.