Skip to main content

qdrant_edge/edge/builders/
group_request.rs

1//! Fluent builder for [`GroupRequest`].
2//!
3//! Builder fields mirror [`GroupRequest`] explicitly so adding a field
4//! to the target struct forces a compile error here.
5
6use crate::segment::json_path::JsonPath;
7
8use crate::edge::requests::grouping::GroupRequest;
9use crate::edge::requests::query::QueryRequest;
10
11/// Fluent builder for [`GroupRequest`].
12///
13/// All fields are required and passed through [`Self::new`].
14#[derive(Clone, Debug)]
15pub struct GroupRequestBuilder {
16    query: QueryRequest,
17    group_by: JsonPath,
18    groups: usize,
19    group_size: usize,
20}
21
22impl GroupRequestBuilder {
23    pub fn new(query: QueryRequest, group_by: JsonPath, groups: usize, group_size: usize) -> Self {
24        let GroupRequest {
25            query,
26            group_by,
27            groups,
28            group_size,
29        } = GroupRequest::new(query, group_by, groups, group_size);
30        Self {
31            query,
32            group_by,
33            groups,
34            group_size,
35        }
36    }
37
38    pub fn build(self) -> GroupRequest {
39        // Exhaustively destructure Self and construct GroupRequest:
40        // adding a field to either type forces a compile error here.
41        let Self {
42            query,
43            group_by,
44            groups,
45            group_size,
46        } = self;
47        GroupRequest {
48            query,
49            group_by,
50            groups,
51            group_size,
52        }
53    }
54}