qdrant_client/builders/
order_by_builder.rs

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