ferroui_dynamic_data/list/
range_change.rs1#[derive(Clone, Debug, PartialEq, Eq, Hash)]
5pub struct RangeChange<T> {
6 items: Vec<T>,
7 index: Option<usize>,
8}
9
10impl<T> Default for RangeChange<T> {
11 fn default() -> Self {
13 Self { items: Vec::new(), index: None }
14 }
15}
16
17impl<T> RangeChange<T> {
18 pub fn new(items: Vec<T>, index: Option<usize>) -> Self {
20 Self { items, index }
21 }
22
23 pub fn count(&self) -> usize {
25 self.items.len()
26 }
27
28 pub fn index(&self) -> Option<usize> {
30 self.index
31 }
32
33 pub fn items(&self) -> &[T] {
35 &self.items
36 }
37
38 pub fn iter(&self) -> std::slice::Iter<'_, T> {
39 self.items.iter()
40 }
41
42 pub fn add(&mut self, item: T) {
44 self.items.push(item);
45 }
46
47 pub fn insert(&mut self, index: usize, item: T) {
49 self.items.insert(index, item);
50 }
51
52 pub fn set_starting_index(&mut self, index: Option<usize>) {
54 self.index = index;
55 }
56}
57
58impl<'a, T> IntoIterator for &'a RangeChange<T> {
59 type Item = &'a T;
60 type IntoIter = std::slice::Iter<'a, T>;
61
62 fn into_iter(self) -> Self::IntoIter {
63 self.items.iter()
64 }
65}