#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct SeriesId(slotmap::DefaultKey);
impl SeriesId {
pub(crate) fn from_key(key: slotmap::DefaultKey) -> Self {
Self(key)
}
pub(crate) fn key(self) -> slotmap::DefaultKey {
self.0
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ChartChange {
SeriesInserted { index: usize, series: SeriesId },
SeriesRemoved { series: SeriesId },
SeriesMoved {
series: SeriesId,
from: usize,
to: usize,
},
SeriesRenamed { series: SeriesId },
SeriesColorChanged { series: SeriesId },
SeriesPatternChanged { series: SeriesId },
SeriesVisibilityChanged { series: SeriesId },
PointsInserted {
series: SeriesId,
range: std::ops::Range<usize>,
},
PointsRemoved {
series: SeriesId,
range: std::ops::Range<usize>,
},
PointUpdated { series: SeriesId, index: usize },
SeriesDataReplaced { series: SeriesId },
Reset,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn series_id_equality() {
use slotmap::SlotMap;
let mut sm: SlotMap<slotmap::DefaultKey, ()> = SlotMap::new();
let k1 = sm.insert(());
let k2 = sm.insert(());
let id1 = SeriesId::from_key(k1);
let id1_clone = SeriesId::from_key(k1);
let id2 = SeriesId::from_key(k2);
assert_eq!(id1, id1_clone);
assert_ne!(id1, id2);
}
}