vantage_table/column/
collection.rs1use std::sync::Arc;
2
3use indexmap::IndexMap;
4
5use crate::{column::flags::ColumnFlag, traits::column_like::ColumnLike};
6
7pub trait ColumnCollectionExt {
15 fn only(&self, flag: ColumnFlag) -> Arc<IndexMap<String, Arc<dyn ColumnLike>>>;
17
18 fn exclude(&self, flag: ColumnFlag) -> Arc<IndexMap<String, Arc<dyn ColumnLike>>>;
20}
21
22impl ColumnCollectionExt for Arc<IndexMap<String, Arc<dyn ColumnLike>>> {
23 fn only(&self, flag: ColumnFlag) -> Arc<IndexMap<String, Arc<dyn ColumnLike>>> {
24 let filtered: IndexMap<String, Arc<dyn ColumnLike>> = self
25 .iter()
26 .filter(|(_, col)| col.flags().contains(&flag))
27 .map(|(k, v)| (k.clone(), v.clone()))
28 .collect();
29 Arc::new(filtered)
30 }
31
32 fn exclude(&self, flag: ColumnFlag) -> Arc<IndexMap<String, Arc<dyn ColumnLike>>> {
33 let filtered: IndexMap<String, Arc<dyn ColumnLike>> = self
34 .iter()
35 .filter(|(_, col)| !col.flags().contains(&flag))
36 .map(|(k, v)| (k.clone(), v.clone()))
37 .collect();
38 Arc::new(filtered)
39 }
40}