Skip to main content

rich_ext/table/
transform.rs

1//! Transforms over [`TableData`]: sort and group, for a
2//! [`Pipeline`](crate::transform::Pipeline).
3
4use super::{GroupBy, SortKey, TableData};
5use crate::transform::{Transform, TransformError};
6
7/// Sorts rows by these keys, replacing any earlier sort.
8#[derive(Clone, Debug)]
9pub struct Sort(pub Vec<SortKey>);
10
11impl Transform<TableData> for Sort {
12    fn apply(&self, mut data: TableData) -> Result<TableData, TransformError> {
13        data.set_sort(self.0.iter().copied());
14        Ok(data)
15    }
16}
17
18/// Groups rows, replacing any earlier grouping.
19#[derive(Clone)]
20pub struct Group(pub GroupBy);
21
22impl Transform<TableData> for Group {
23    fn apply(&self, data: TableData) -> Result<TableData, TransformError> {
24        Ok(data.group_by(self.0.clone()))
25    }
26}