Skip to main content

qdrant_client/builders/
order_by_builder.rs

1use crate::grpc_macros::convert_option;
2use crate::qdrant::*;
3
4#[must_use]
5#[derive(Clone)]
6pub struct OrderByBuilder {
7    /// Payload key to order by
8    pub(crate) key: Option<String>,
9    /// Ascending or descending order
10    pub(crate) direction: Option<Option<i32>>,
11    /// Start from this value
12    start_from: Option<start_from::Value>,
13}
14
15impl OrderByBuilder {
16    /// Payload key to order by
17    pub fn key(self, value: String) -> Self {
18        let mut new = self;
19        new.key = Option::Some(value);
20        new
21    }
22    /// Ascending or descending order
23    pub fn direction(self, value: i32) -> Self {
24        let mut new = self;
25        new.direction = Option::Some(Option::Some(value));
26        new
27    }
28    /// Start from this value
29    pub fn start_from<VALUE: core::convert::Into<start_from::Value>>(self, value: VALUE) -> Self {
30        let mut new = self;
31        new.start_from = Option::Some(value.into());
32        new
33    }
34
35    fn build_inner(self) -> Result<OrderBy, OrderByBuilderError> {
36        Ok(OrderBy {
37            key: match self.key {
38                Some(value) => value,
39                None => {
40                    return Result::Err(core::convert::Into::into(
41                        ::derive_builder::UninitializedFieldError::from("key"),
42                    ));
43                }
44            },
45            direction: self.direction.unwrap_or_default(),
46            start_from: { convert_option(&self.start_from) },
47        })
48    }
49    /// Create an empty builder, with all fields set to `None` or `PhantomData`.
50    fn create_empty() -> Self {
51        Self {
52            key: core::default::Default::default(),
53            direction: core::default::Default::default(),
54            start_from: core::default::Default::default(),
55        }
56    }
57}
58
59impl From<OrderByBuilder> for OrderBy {
60    fn from(value: OrderByBuilder) -> Self {
61        value
62            .build_inner()
63            .unwrap_or_else(|_| panic!("Failed to convert {0} to {1}", "OrderByBuilder", "OrderBy"))
64    }
65}
66
67impl OrderByBuilder {
68    /// Builds the desired type. Can often be omitted.
69    pub fn build(self) -> OrderBy {
70        self.build_inner()
71            .unwrap_or_else(|_| panic!("Failed to build {0} into {1}", "OrderByBuilder", "OrderBy"))
72    }
73}
74
75impl OrderByBuilder {
76    pub(crate) fn empty() -> Self {
77        Self::create_empty()
78    }
79}
80
81/// Error type for OrderByBuilder
82#[non_exhaustive]
83#[derive(Debug)]
84pub enum OrderByBuilderError {
85    /// Uninitialized field
86    UninitializedField(&'static str),
87    /// Custom validation error
88    ValidationError(String),
89}
90
91// Implementing the Display trait for better error messages
92impl std::fmt::Display for OrderByBuilderError {
93    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
94        match self {
95            Self::UninitializedField(field) => {
96                write!(f, "`{field}` must be initialized")
97            }
98            Self::ValidationError(error) => write!(f, "{error}"),
99        }
100    }
101}
102
103// Implementing the Error trait
104impl std::error::Error for OrderByBuilderError {}
105
106// Implementing From trait for conversion from UninitializedFieldError
107impl From<derive_builder::UninitializedFieldError> for OrderByBuilderError {
108    fn from(error: derive_builder::UninitializedFieldError) -> Self {
109        Self::UninitializedField(error.field_name())
110    }
111}
112
113// Implementing From trait for conversion from String
114impl From<String> for OrderByBuilderError {
115    fn from(error: String) -> Self {
116        Self::ValidationError(error)
117    }
118}