patternfly_yew/components/table/model/
memoized.rs1use 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}