qdrant_client/builders/
binary_quantization_builder.rs1use crate::qdrant::*;
2
3#[derive(Clone)]
4pub struct BinaryQuantizationBuilder {
5 pub(crate) always_ram: Option<Option<bool>>,
7 pub(crate) encoding: Option<Option<i32>>,
8 pub(crate) query_encoding: Option<Option<BinaryQuantizationQueryEncoding>>,
9}
10
11impl BinaryQuantizationBuilder {
12 pub fn always_ram(self, value: bool) -> Self {
14 let mut new = self;
15 new.always_ram = Some(Some(value));
16 new
17 }
18
19 pub fn encoding(self, value: impl Into<BinaryQuantizationEncoding>) -> Self {
21 let mut new = self;
22 let encoding: BinaryQuantizationEncoding = value.into();
23 new.encoding = Some(Some(encoding.into()));
24 new
25 }
26
27 pub fn query_encoding(self, value: impl Into<BinaryQuantizationQueryEncoding>) -> Self {
30 let mut new = self;
31 new.query_encoding = Some(Some(value.into()));
32 new
33 }
34
35 fn build_inner(self) -> Result<BinaryQuantization, BinaryQuantizationBuilderError> {
36 Ok(BinaryQuantization {
37 always_ram: self.always_ram.unwrap_or_default(),
38 encoding: self.encoding.unwrap_or_default(),
39 query_encoding: self.query_encoding.unwrap_or_default(),
40 })
41 }
42 fn create_empty() -> Self {
44 Self {
45 always_ram: Default::default(),
46 encoding: Default::default(),
47 query_encoding: Default::default(),
48 }
49 }
50}
51
52impl From<BinaryQuantizationBuilder> for BinaryQuantization {
53 fn from(value: BinaryQuantizationBuilder) -> Self {
54 value.build_inner().unwrap_or_else(|_| {
55 panic!(
56 "Failed to convert {0} to {1}",
57 "BinaryQuantizationBuilder", "BinaryQuantization"
58 )
59 })
60 }
61}
62
63impl BinaryQuantizationBuilder {
64 pub fn build(self) -> BinaryQuantization {
66 self.build_inner().unwrap_or_else(|_| {
67 panic!(
68 "Failed to build {0} into {1}",
69 "BinaryQuantizationBuilder", "BinaryQuantization"
70 )
71 })
72 }
73}
74
75impl BinaryQuantizationBuilder {
76 pub(crate) fn empty() -> Self {
77 Self::create_empty()
78 }
79}
80
81#[non_exhaustive]
82#[derive(Debug)]
83pub enum BinaryQuantizationBuilderError {
84 UninitializedField(&'static str),
86 ValidationError(String),
88}
89
90impl std::fmt::Display for BinaryQuantizationBuilderError {
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
102impl std::error::Error for BinaryQuantizationBuilderError {}
104
105impl From<derive_builder::UninitializedFieldError> for BinaryQuantizationBuilderError {
107 fn from(error: derive_builder::UninitializedFieldError) -> Self {
108 Self::UninitializedField(error.field_name())
109 }
110}
111
112impl From<String> for BinaryQuantizationBuilderError {
114 fn from(error: String) -> Self {
115 Self::ValidationError(error)
116 }
117}
118
119impl BinaryQuantizationQueryEncoding {
120 pub fn scalar8bits() -> Self {
121 Self {
122 variant: Some(binary_quantization_query_encoding::Variant::Setting(
123 binary_quantization_query_encoding::Setting::Scalar8Bits.into(),
124 )),
125 }
126 }
127
128 pub fn scalar4bits() -> Self {
129 Self {
130 variant: Some(binary_quantization_query_encoding::Variant::Setting(
131 binary_quantization_query_encoding::Setting::Scalar4Bits.into(),
132 )),
133 }
134 }
135
136 pub fn binary() -> Self {
137 Self {
138 variant: Some(binary_quantization_query_encoding::Variant::Setting(
139 binary_quantization_query_encoding::Setting::Binary.into(),
140 )),
141 }
142 }
143
144 pub fn default_encoding() -> Self {
145 Self {
146 variant: Some(binary_quantization_query_encoding::Variant::Setting(
147 binary_quantization_query_encoding::Setting::Default.into(),
148 )),
149 }
150 }
151}