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