Skip to main content

qdrant_client/builders/
multi_vector_config_builder.rs

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