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