1use crate::dsl::scope::never::Never;
2
3pub struct Group<T, K>(Never<(T, K)>);
4pub struct Handle(Never<()>);
5
6impl<T, K> Group<T, K> {
7 pub fn count(self) -> Vec<(K, i64)> {
8 self.0.infer(())
9 }
10
11 pub fn sum<F, U>(self, map: F) -> Vec<(K, Option<U>)>
12 where
13 F: FnOnce(T) -> U,
14 {
15 self.0.infer(map)
16 }
17
18 pub fn having<F>(self, pred: F) -> Self
19 where
20 F: FnOnce(T, Handle) -> bool,
21 {
22 self.0.infer(pred)
23 }
24
25 pub fn order_by<F, U>(self, key: F) -> Self
26 where
27 F: FnOnce(T) -> U,
28 {
29 self.0.infer(key)
30 }
31}
32
33impl Handle {
34 pub fn count(self) -> i64 {
35 self.0.infer(())
36 }
37}