patternfly_yew/components/table/model/
memoized.rs

1use crate::prelude::TableEntryRenderer;
2use std::iter::Enumerate;
3use std::rc::Rc;
4
5pub struct SplitTableModel {}
6
7pub struct MemoizedTableModel<T> {
8    entries: Rc<Vec<T>>,
9}
10
11impl<T> Clone for MemoizedTableModel<T> {
12    fn clone(&self) -> Self {
13        Self {
14            entries: self.entries.clone(),
15        }
16    }
17}
18
19impl<T> MemoizedTableModel<T> {
20    pub fn new(entries: Rc<Vec<T>>) -> Self {
21        Self { entries }
22    }
23}
24
25impl<T> From<Rc<Vec<T>>> for MemoizedTableModel<T> {
26    fn from(value: Rc<Vec<T>>) -> Self {
27        MemoizedTableModel::new(value)
28    }
29}
30
31impl<T> PartialEq for MemoizedTableModel<T> {
32    fn eq(&self, other: &Self) -> bool {
33        Rc::ptr_eq(&self.entries, &other.entries)
34    }
35}
36
37impl<C, T> super::TableDataModel<C> for MemoizedTableModel<T>
38where
39    C: Clone + Eq + 'static,
40    T: TableEntryRenderer<C> + Clone + 'static,
41{
42    type Iterator<'i> = Enumerate<core::slice::Iter<'i, Self::Item>>;
43    type Item = T;
44    type Key = usize;
45
46    fn len(&self) -> usize {
47        self.entries.len()
48    }
49
50    fn is_empty(&self) -> bool {
51        self.entries.is_empty()
52    }
53
54    fn contains(&self, key: &Self::Key) -> bool {
55        *key < self.entries.len()
56    }
57
58    fn iter(&self) -> Self::Iterator<'_> {
59        self.entries.iter().enumerate()
60    }
61}