typesense_rs/apis/
documents_api.rs

1// Typesense API
2//
3// An open source search engine for building delightful search experiences.
4//
5// The version of the OpenAPI document: 27.0
6//
7// Generated by: https://openapi-generator.tech
8
9use std::sync::Arc;
10
11use async_trait::async_trait;
12use reqwest;
13use serde::{Deserialize, Serialize};
14
15use super::{configuration, Error};
16use crate::apis::ResponseContent;
17use crate::models;
18
19#[async_trait]
20pub trait DocumentsApi: Send + Sync {
21	async fn delete_document(&self, params: DeleteDocumentParams) -> Result<serde_json::Value, Error<DeleteDocumentError>>;
22	async fn delete_documents(
23		&self,
24		params: DeleteDocumentsParams,
25	) -> Result<models::DeleteDocuments200Response, Error<DeleteDocumentsError>>;
26	async fn delete_search_override(
27		&self,
28		params: DeleteSearchOverrideParams,
29	) -> Result<models::SearchOverride, Error<DeleteSearchOverrideError>>;
30	async fn delete_search_synonym(
31		&self,
32		params: DeleteSearchSynonymParams,
33	) -> Result<models::SearchSynonym, Error<DeleteSearchSynonymError>>;
34	async fn export_documents(&self, params: ExportDocumentsParams) -> Result<String, Error<ExportDocumentsError>>;
35	async fn get_document(&self, params: GetDocumentParams) -> Result<serde_json::Value, Error<GetDocumentError>>;
36	async fn get_search_override(
37		&self,
38		params: GetSearchOverrideParams,
39	) -> Result<models::SearchOverride, Error<GetSearchOverrideError>>;
40	async fn get_search_overrides(
41		&self,
42		params: GetSearchOverridesParams,
43	) -> Result<models::SearchOverridesResponse, Error<GetSearchOverridesError>>;
44	async fn get_search_synonym(
45		&self,
46		params: GetSearchSynonymParams,
47	) -> Result<models::SearchSynonym, Error<GetSearchSynonymError>>;
48	async fn get_search_synonyms(
49		&self,
50		params: GetSearchSynonymsParams,
51	) -> Result<models::SearchSynonymsResponse, Error<GetSearchSynonymsError>>;
52	async fn import_documents(&self, params: ImportDocumentsParams) -> Result<String, Error<ImportDocumentsError>>;
53	async fn index_document(&self, params: IndexDocumentParams) -> Result<serde_json::Value, Error<IndexDocumentError>>;
54	async fn multi_search(&self, params: MultiSearchParams) -> Result<models::MultiSearchResult, Error<MultiSearchError>>;
55	async fn search_collection(
56		&self,
57		params: SearchCollectionParams,
58	) -> Result<models::SearchResult, Error<SearchCollectionError>>;
59	async fn update_document(&self, params: UpdateDocumentParams) -> Result<serde_json::Value, Error<UpdateDocumentError>>;
60	async fn update_documents(
61		&self,
62		params: UpdateDocumentsParams,
63	) -> Result<models::UpdateDocuments200Response, Error<UpdateDocumentsError>>;
64	async fn upsert_search_override(
65		&self,
66		params: UpsertSearchOverrideParams,
67	) -> Result<models::SearchOverride, Error<UpsertSearchOverrideError>>;
68	async fn upsert_search_synonym(
69		&self,
70		params: UpsertSearchSynonymParams,
71	) -> Result<models::SearchSynonym, Error<UpsertSearchSynonymError>>;
72}
73
74pub struct DocumentsApiClient {
75	configuration: Arc<configuration::Configuration>,
76}
77
78impl DocumentsApiClient {
79	pub fn new(configuration: Arc<configuration::Configuration>) -> Self {
80		Self { configuration }
81	}
82}
83
84/// struct for passing parameters to the method [`delete_document`]
85#[derive(Clone, Debug)]
86#[cfg_attr(feature = "bon", derive(::bon::Builder))]
87pub struct DeleteDocumentParams {
88	/// The name of the collection to search for the document under
89	pub collection_name: String,
90	/// The Document ID
91	pub document_id: String,
92}
93
94/// struct for passing parameters to the method [`delete_documents`]
95#[derive(Clone, Debug)]
96#[cfg_attr(feature = "bon", derive(::bon::Builder))]
97pub struct DeleteDocumentsParams {
98	/// The name of the collection to delete documents from
99	pub collection_name: String,
100	pub filter_by: String,
101	pub batch_size: Option<i32>,
102	pub ignore_not_found: Option<bool>,
103}
104
105/// struct for passing parameters to the method [`delete_search_override`]
106#[derive(Clone, Debug)]
107#[cfg_attr(feature = "bon", derive(::bon::Builder))]
108pub struct DeleteSearchOverrideParams {
109	/// The name of the collection
110	pub collection_name: String,
111	/// The ID of the search override to delete
112	pub override_id: String,
113}
114
115/// struct for passing parameters to the method [`delete_search_synonym`]
116#[derive(Clone, Debug)]
117#[cfg_attr(feature = "bon", derive(::bon::Builder))]
118pub struct DeleteSearchSynonymParams {
119	/// The name of the collection
120	pub collection_name: String,
121	/// The ID of the search synonym to delete
122	pub synonym_id: String,
123}
124
125/// struct for passing parameters to the method [`export_documents`]
126#[derive(Clone, Debug)]
127#[cfg_attr(feature = "bon", derive(::bon::Builder))]
128pub struct ExportDocumentsParams {
129	/// The name of the collection
130	pub collection_name: String,
131	pub filter_by: Option<String>,
132	pub include_fields: Option<String>,
133	pub exclude_fields: Option<String>,
134}
135
136/// struct for passing parameters to the method [`get_document`]
137#[derive(Clone, Debug)]
138#[cfg_attr(feature = "bon", derive(::bon::Builder))]
139pub struct GetDocumentParams {
140	/// The name of the collection to search for the document under
141	pub collection_name: String,
142	/// The Document ID
143	pub document_id: String,
144}
145
146/// struct for passing parameters to the method [`get_search_override`]
147#[derive(Clone, Debug)]
148#[cfg_attr(feature = "bon", derive(::bon::Builder))]
149pub struct GetSearchOverrideParams {
150	/// The name of the collection
151	pub collection_name: String,
152	/// The id of the search override
153	pub override_id: String,
154}
155
156/// struct for passing parameters to the method [`get_search_overrides`]
157#[derive(Clone, Debug)]
158#[cfg_attr(feature = "bon", derive(::bon::Builder))]
159pub struct GetSearchOverridesParams {
160	/// The name of the collection
161	pub collection_name: String,
162}
163
164/// struct for passing parameters to the method [`get_search_synonym`]
165#[derive(Clone, Debug)]
166#[cfg_attr(feature = "bon", derive(::bon::Builder))]
167pub struct GetSearchSynonymParams {
168	/// The name of the collection
169	pub collection_name: String,
170	/// The id of the search synonym
171	pub synonym_id: String,
172}
173
174/// struct for passing parameters to the method [`get_search_synonyms`]
175#[derive(Clone, Debug)]
176#[cfg_attr(feature = "bon", derive(::bon::Builder))]
177pub struct GetSearchSynonymsParams {
178	/// The name of the collection
179	pub collection_name: String,
180}
181
182/// struct for passing parameters to the method [`import_documents`]
183#[derive(Clone, Debug)]
184#[cfg_attr(feature = "bon", derive(::bon::Builder))]
185pub struct ImportDocumentsParams {
186	/// The name of the collection
187	pub collection_name: String,
188	/// The json array of documents or the JSONL file to import
189	pub body: String,
190	pub batch_size: Option<i32>,
191	pub return_id: Option<bool>,
192	pub remote_embedding_batch_size: Option<i32>,
193	pub return_doc: Option<bool>,
194	pub action: Option<models::IndexAction>,
195	pub dirty_values: Option<models::DirtyValues>,
196}
197
198/// struct for passing parameters to the method [`index_document`]
199#[derive(Clone, Debug)]
200#[cfg_attr(feature = "bon", derive(::bon::Builder))]
201pub struct IndexDocumentParams {
202	/// The name of the collection to add the document to
203	pub collection_name: String,
204	/// The document object to be indexed
205	pub body: serde_json::Value,
206	/// Additional action to perform
207	pub action: Option<String>,
208	/// Dealing with Dirty Data
209	pub dirty_values: Option<models::DirtyValues>,
210}
211
212/// struct for passing parameters to the method [`multi_search`]
213#[derive(Clone, Debug)]
214#[cfg_attr(feature = "bon", derive(::bon::Builder))]
215pub struct MultiSearchParams {
216	pub q: Option<String>,
217	pub query_by: Option<String>,
218	pub query_by_weights: Option<String>,
219	pub text_match_type: Option<String>,
220	pub prefix: Option<String>,
221	pub infix: Option<String>,
222	pub max_extra_prefix: Option<i32>,
223	pub max_extra_suffix: Option<i32>,
224	pub filter_by: Option<String>,
225	pub sort_by: Option<String>,
226	pub facet_by: Option<String>,
227	pub max_facet_values: Option<i32>,
228	pub facet_query: Option<String>,
229	pub num_typos: Option<String>,
230	pub page: Option<i32>,
231	pub per_page: Option<i32>,
232	pub limit: Option<i32>,
233	pub offset: Option<i32>,
234	pub group_by: Option<String>,
235	pub group_limit: Option<i32>,
236	pub group_missing_values: Option<bool>,
237	pub include_fields: Option<String>,
238	pub exclude_fields: Option<String>,
239	pub highlight_full_fields: Option<String>,
240	pub highlight_affix_num_tokens: Option<i32>,
241	pub highlight_start_tag: Option<String>,
242	pub highlight_end_tag: Option<String>,
243	pub snippet_threshold: Option<i32>,
244	pub drop_tokens_threshold: Option<i32>,
245	pub drop_tokens_mode: Option<models::DropTokensMode>,
246	pub typo_tokens_threshold: Option<i32>,
247	pub enable_typos_for_alpha_numerical_tokens: Option<bool>,
248	pub filter_curated_hits: Option<bool>,
249	pub enable_synonyms: Option<bool>,
250	pub synonym_prefix: Option<bool>,
251	pub synonym_num_typos: Option<i32>,
252	pub pinned_hits: Option<String>,
253	pub hidden_hits: Option<String>,
254	pub override_tags: Option<String>,
255	pub highlight_fields: Option<String>,
256	pub pre_segmented_query: Option<bool>,
257	pub preset: Option<String>,
258	pub enable_overrides: Option<bool>,
259	pub prioritize_exact_match: Option<bool>,
260	pub prioritize_token_position: Option<bool>,
261	pub prioritize_num_matching_fields: Option<bool>,
262	pub enable_typos_for_numerical_tokens: Option<bool>,
263	pub exhaustive_search: Option<bool>,
264	pub search_cutoff_ms: Option<i32>,
265	pub use_cache: Option<bool>,
266	pub cache_ttl: Option<i32>,
267	pub min_len_1typo: Option<i32>,
268	pub min_len_2typo: Option<i32>,
269	pub vector_query: Option<String>,
270	pub remote_embedding_timeout_ms: Option<i32>,
271	pub remote_embedding_num_tries: Option<i32>,
272	pub facet_strategy: Option<String>,
273	pub stopwords: Option<String>,
274	pub facet_return_parent: Option<String>,
275	pub voice_query: Option<String>,
276	pub conversation: Option<bool>,
277	pub conversation_model_id: Option<String>,
278	pub conversation_id: Option<String>,
279	pub multi_search_searches_parameter: Option<models::MultiSearchSearchesParameter>,
280}
281
282/// struct for passing parameters to the method [`search_collection`]
283#[derive(Clone, Debug)]
284#[cfg_attr(feature = "bon", derive(::bon::Builder))]
285pub struct SearchCollectionParams {
286	/// The name of the collection to search for the document under
287	pub collection_name: String,
288	pub q: String,
289	pub query_by: String,
290	pub query_by_weights: Option<String>,
291	pub text_match_type: Option<String>,
292	pub prefix: Option<String>,
293	pub infix: Option<String>,
294	pub max_extra_prefix: Option<i32>,
295	pub max_extra_suffix: Option<i32>,
296	pub filter_by: Option<String>,
297	pub sort_by: Option<String>,
298	pub facet_by: Option<String>,
299	pub max_facet_values: Option<i32>,
300	pub facet_query: Option<String>,
301	pub num_typos: Option<String>,
302	pub page: Option<i32>,
303	pub per_page: Option<i32>,
304	pub limit: Option<i32>,
305	pub offset: Option<i32>,
306	pub group_by: Option<String>,
307	pub group_limit: Option<i32>,
308	pub group_missing_values: Option<bool>,
309	pub include_fields: Option<String>,
310	pub exclude_fields: Option<String>,
311	pub highlight_full_fields: Option<String>,
312	pub highlight_affix_num_tokens: Option<i32>,
313	pub highlight_start_tag: Option<String>,
314	pub highlight_end_tag: Option<String>,
315	pub enable_highlight_v1: Option<bool>,
316	pub snippet_threshold: Option<i32>,
317	pub drop_tokens_threshold: Option<i32>,
318	pub drop_tokens_mode: Option<models::DropTokensMode>,
319	pub typo_tokens_threshold: Option<i32>,
320	pub enable_typos_for_alpha_numerical_tokens: Option<bool>,
321	pub filter_curated_hits: Option<bool>,
322	pub enable_synonyms: Option<bool>,
323	pub synonym_prefix: Option<bool>,
324	pub synonym_num_typos: Option<i32>,
325	pub pinned_hits: Option<String>,
326	pub hidden_hits: Option<String>,
327	pub override_tags: Option<String>,
328	pub highlight_fields: Option<String>,
329	pub split_join_tokens: Option<String>,
330	pub pre_segmented_query: Option<bool>,
331	pub preset: Option<String>,
332	pub enable_overrides: Option<bool>,
333	pub prioritize_exact_match: Option<bool>,
334	pub max_candidates: Option<i32>,
335	pub prioritize_token_position: Option<bool>,
336	pub prioritize_num_matching_fields: Option<bool>,
337	pub enable_typos_for_numerical_tokens: Option<bool>,
338	pub exhaustive_search: Option<bool>,
339	pub search_cutoff_ms: Option<i32>,
340	pub use_cache: Option<bool>,
341	pub cache_ttl: Option<i32>,
342	pub min_len_1typo: Option<i32>,
343	pub min_len_2typo: Option<i32>,
344	pub vector_query: Option<String>,
345	pub remote_embedding_timeout_ms: Option<i32>,
346	pub remote_embedding_num_tries: Option<i32>,
347	pub facet_strategy: Option<String>,
348	pub stopwords: Option<String>,
349	pub facet_return_parent: Option<String>,
350	pub voice_query: Option<String>,
351	pub conversation: Option<bool>,
352	pub conversation_model_id: Option<String>,
353	pub conversation_id: Option<String>,
354}
355
356/// struct for passing parameters to the method [`update_document`]
357#[derive(Clone, Debug)]
358#[cfg_attr(feature = "bon", derive(::bon::Builder))]
359pub struct UpdateDocumentParams {
360	/// The name of the collection to search for the document under
361	pub collection_name: String,
362	/// The Document ID
363	pub document_id: String,
364	/// The document object with fields to be updated
365	pub body: serde_json::Value,
366	/// Dealing with Dirty Data
367	pub dirty_values: Option<models::DirtyValues>,
368}
369
370/// struct for passing parameters to the method [`update_documents`]
371#[derive(Clone, Debug)]
372#[cfg_attr(feature = "bon", derive(::bon::Builder))]
373pub struct UpdateDocumentsParams {
374	/// The name of the collection to update documents in
375	pub collection_name: String,
376	/// The document fields to be updated
377	pub body: serde_json::Value,
378	pub filter_by: Option<String>,
379}
380
381/// struct for passing parameters to the method [`upsert_search_override`]
382#[derive(Clone, Debug)]
383#[cfg_attr(feature = "bon", derive(::bon::Builder))]
384pub struct UpsertSearchOverrideParams {
385	/// The name of the collection
386	pub collection_name: String,
387	/// The ID of the search override to create/update
388	pub override_id: String,
389	/// The search override object to be created/updated
390	pub search_override_schema: models::SearchOverrideSchema,
391}
392
393/// struct for passing parameters to the method [`upsert_search_synonym`]
394#[derive(Clone, Debug)]
395#[cfg_attr(feature = "bon", derive(::bon::Builder))]
396pub struct UpsertSearchSynonymParams {
397	/// The name of the collection
398	pub collection_name: String,
399	/// The ID of the search synonym to create/update
400	pub synonym_id: String,
401	/// The search synonym object to be created/updated
402	pub search_synonym_schema: models::SearchSynonymSchema,
403}
404
405#[async_trait]
406impl DocumentsApi for DocumentsApiClient {
407	/// Delete an individual document from a collection by using its ID.
408	async fn delete_document(&self, params: DeleteDocumentParams) -> Result<serde_json::Value, Error<DeleteDocumentError>> {
409		let DeleteDocumentParams {
410			collection_name,
411			document_id,
412		} = params;
413
414		let local_var_configuration = &self.configuration;
415
416		let local_var_client = &local_var_configuration.client;
417
418		let local_var_uri_str = format!(
419			"{}/collections/{collectionName}/documents/{documentId}",
420			local_var_configuration.base_path,
421			collectionName = crate::apis::urlencode(collection_name),
422			documentId = crate::apis::urlencode(document_id)
423		);
424		let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
425
426		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
427			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
428		}
429		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
430			let local_var_key = local_var_apikey.key.clone();
431			let local_var_value = match local_var_apikey.prefix {
432				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
433				None => local_var_key,
434			};
435			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
436		};
437
438		let local_var_req = local_var_req_builder.build()?;
439		let local_var_resp = local_var_client.execute(local_var_req).await?;
440
441		let local_var_status = local_var_resp.status();
442		let local_var_content = local_var_resp.text().await?;
443
444		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
445			serde_json::from_str(&local_var_content).map_err(Error::from)
446		} else {
447			let local_var_entity: Option<DeleteDocumentError> = serde_json::from_str(&local_var_content).ok();
448			let local_var_error = ResponseContent {
449				status: local_var_status,
450				content: local_var_content,
451				entity: local_var_entity,
452			};
453			Err(Error::ResponseError(local_var_error))
454		}
455	}
456
457	/// Delete a bunch of documents that match a specific filter condition. Use
458	/// the `batch_size` parameter to control the number of documents that
459	/// should deleted at a time. A larger value will speed up deletions, but
460	/// will impact performance of other operations running on the server.
461	async fn delete_documents(
462		&self,
463		params: DeleteDocumentsParams,
464	) -> Result<models::DeleteDocuments200Response, Error<DeleteDocumentsError>> {
465		let DeleteDocumentsParams {
466			collection_name,
467			filter_by,
468			batch_size,
469			ignore_not_found,
470		} = params;
471
472		let local_var_configuration = &self.configuration;
473
474		let local_var_client = &local_var_configuration.client;
475
476		let local_var_uri_str = format!(
477			"{}/collections/{collectionName}/documents",
478			local_var_configuration.base_path,
479			collectionName = crate::apis::urlencode(collection_name)
480		);
481		let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
482
483		local_var_req_builder = local_var_req_builder.query(&[("filter_by", &filter_by.to_string())]);
484		if let Some(ref local_var_str) = batch_size {
485			local_var_req_builder = local_var_req_builder.query(&[("batch_size", &local_var_str.to_string())]);
486		}
487		if let Some(ref local_var_str) = ignore_not_found {
488			local_var_req_builder = local_var_req_builder.query(&[("ignore_not_found", &local_var_str.to_string())]);
489		}
490		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
491			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
492		}
493		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
494			let local_var_key = local_var_apikey.key.clone();
495			let local_var_value = match local_var_apikey.prefix {
496				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
497				None => local_var_key,
498			};
499			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
500		};
501
502		let local_var_req = local_var_req_builder.build()?;
503		let local_var_resp = local_var_client.execute(local_var_req).await?;
504
505		let local_var_status = local_var_resp.status();
506		let local_var_content = local_var_resp.text().await?;
507
508		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
509			serde_json::from_str(&local_var_content).map_err(Error::from)
510		} else {
511			let local_var_entity: Option<DeleteDocumentsError> = serde_json::from_str(&local_var_content).ok();
512			let local_var_error = ResponseContent {
513				status: local_var_status,
514				content: local_var_content,
515				entity: local_var_entity,
516			};
517			Err(Error::ResponseError(local_var_error))
518		}
519	}
520
521	async fn delete_search_override(
522		&self,
523		params: DeleteSearchOverrideParams,
524	) -> Result<models::SearchOverride, Error<DeleteSearchOverrideError>> {
525		let DeleteSearchOverrideParams {
526			collection_name,
527			override_id,
528		} = params;
529
530		let local_var_configuration = &self.configuration;
531
532		let local_var_client = &local_var_configuration.client;
533
534		let local_var_uri_str = format!(
535			"{}/collections/{collectionName}/overrides/{overrideId}",
536			local_var_configuration.base_path,
537			collectionName = crate::apis::urlencode(collection_name),
538			overrideId = crate::apis::urlencode(override_id)
539		);
540		let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
541
542		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
543			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
544		}
545		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
546			let local_var_key = local_var_apikey.key.clone();
547			let local_var_value = match local_var_apikey.prefix {
548				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
549				None => local_var_key,
550			};
551			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
552		};
553
554		let local_var_req = local_var_req_builder.build()?;
555		let local_var_resp = local_var_client.execute(local_var_req).await?;
556
557		let local_var_status = local_var_resp.status();
558		let local_var_content = local_var_resp.text().await?;
559
560		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
561			serde_json::from_str(&local_var_content).map_err(Error::from)
562		} else {
563			let local_var_entity: Option<DeleteSearchOverrideError> = serde_json::from_str(&local_var_content).ok();
564			let local_var_error = ResponseContent {
565				status: local_var_status,
566				content: local_var_content,
567				entity: local_var_entity,
568			};
569			Err(Error::ResponseError(local_var_error))
570		}
571	}
572
573	async fn delete_search_synonym(
574		&self,
575		params: DeleteSearchSynonymParams,
576	) -> Result<models::SearchSynonym, Error<DeleteSearchSynonymError>> {
577		let DeleteSearchSynonymParams {
578			collection_name,
579			synonym_id,
580		} = params;
581
582		let local_var_configuration = &self.configuration;
583
584		let local_var_client = &local_var_configuration.client;
585
586		let local_var_uri_str = format!(
587			"{}/collections/{collectionName}/synonyms/{synonymId}",
588			local_var_configuration.base_path,
589			collectionName = crate::apis::urlencode(collection_name),
590			synonymId = crate::apis::urlencode(synonym_id)
591		);
592		let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
593
594		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
595			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
596		}
597		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
598			let local_var_key = local_var_apikey.key.clone();
599			let local_var_value = match local_var_apikey.prefix {
600				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
601				None => local_var_key,
602			};
603			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
604		};
605
606		let local_var_req = local_var_req_builder.build()?;
607		let local_var_resp = local_var_client.execute(local_var_req).await?;
608
609		let local_var_status = local_var_resp.status();
610		let local_var_content = local_var_resp.text().await?;
611
612		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
613			serde_json::from_str(&local_var_content).map_err(Error::from)
614		} else {
615			let local_var_entity: Option<DeleteSearchSynonymError> = serde_json::from_str(&local_var_content).ok();
616			let local_var_error = ResponseContent {
617				status: local_var_status,
618				content: local_var_content,
619				entity: local_var_entity,
620			};
621			Err(Error::ResponseError(local_var_error))
622		}
623	}
624
625	/// Export all documents in a collection in JSON lines format.
626	async fn export_documents(&self, params: ExportDocumentsParams) -> Result<String, Error<ExportDocumentsError>> {
627		let ExportDocumentsParams {
628			collection_name,
629			filter_by,
630			include_fields,
631			exclude_fields,
632		} = params;
633
634		let local_var_configuration = &self.configuration;
635
636		let local_var_client = &local_var_configuration.client;
637
638		let local_var_uri_str = format!(
639			"{}/collections/{collectionName}/documents/export",
640			local_var_configuration.base_path,
641			collectionName = crate::apis::urlencode(collection_name)
642		);
643		let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
644
645		if let Some(ref local_var_str) = filter_by {
646			local_var_req_builder = local_var_req_builder.query(&[("filter_by", &local_var_str.to_string())]);
647		}
648		if let Some(ref local_var_str) = include_fields {
649			local_var_req_builder = local_var_req_builder.query(&[("include_fields", &local_var_str.to_string())]);
650		}
651		if let Some(ref local_var_str) = exclude_fields {
652			local_var_req_builder = local_var_req_builder.query(&[("exclude_fields", &local_var_str.to_string())]);
653		}
654		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
655			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
656		}
657		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
658			let local_var_key = local_var_apikey.key.clone();
659			let local_var_value = match local_var_apikey.prefix {
660				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
661				None => local_var_key,
662			};
663			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
664		};
665
666		let local_var_req = local_var_req_builder.build()?;
667		let local_var_resp = local_var_client.execute(local_var_req).await?;
668
669		let local_var_status = local_var_resp.status();
670		let local_var_content = local_var_resp.text().await?;
671
672		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
673			// Manually edited to return the content as a string
674			Ok(local_var_content)
675		} else {
676			let local_var_entity: Option<ExportDocumentsError> = serde_json::from_str(&local_var_content).ok();
677			let local_var_error = ResponseContent {
678				status: local_var_status,
679				content: local_var_content,
680				entity: local_var_entity,
681			};
682			Err(Error::ResponseError(local_var_error))
683		}
684	}
685
686	/// Fetch an individual document from a collection by using its ID.
687	async fn get_document(&self, params: GetDocumentParams) -> Result<serde_json::Value, Error<GetDocumentError>> {
688		let GetDocumentParams {
689			collection_name,
690			document_id,
691		} = params;
692
693		let local_var_configuration = &self.configuration;
694
695		let local_var_client = &local_var_configuration.client;
696
697		let local_var_uri_str = format!(
698			"{}/collections/{collectionName}/documents/{documentId}",
699			local_var_configuration.base_path,
700			collectionName = crate::apis::urlencode(collection_name),
701			documentId = crate::apis::urlencode(document_id)
702		);
703		let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
704
705		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
706			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
707		}
708		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
709			let local_var_key = local_var_apikey.key.clone();
710			let local_var_value = match local_var_apikey.prefix {
711				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
712				None => local_var_key,
713			};
714			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
715		};
716
717		let local_var_req = local_var_req_builder.build()?;
718		let local_var_resp = local_var_client.execute(local_var_req).await?;
719
720		let local_var_status = local_var_resp.status();
721		let local_var_content = local_var_resp.text().await?;
722
723		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
724			serde_json::from_str(&local_var_content).map_err(Error::from)
725		} else {
726			let local_var_entity: Option<GetDocumentError> = serde_json::from_str(&local_var_content).ok();
727			let local_var_error = ResponseContent {
728				status: local_var_status,
729				content: local_var_content,
730				entity: local_var_entity,
731			};
732			Err(Error::ResponseError(local_var_error))
733		}
734	}
735
736	/// Retrieve the details of a search override, given its id.
737	async fn get_search_override(
738		&self,
739		params: GetSearchOverrideParams,
740	) -> Result<models::SearchOverride, Error<GetSearchOverrideError>> {
741		let GetSearchOverrideParams {
742			collection_name,
743			override_id,
744		} = params;
745
746		let local_var_configuration = &self.configuration;
747
748		let local_var_client = &local_var_configuration.client;
749
750		let local_var_uri_str = format!(
751			"{}/collections/{collectionName}/overrides/{overrideId}",
752			local_var_configuration.base_path,
753			collectionName = crate::apis::urlencode(collection_name),
754			overrideId = crate::apis::urlencode(override_id)
755		);
756		let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
757
758		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
759			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
760		}
761		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
762			let local_var_key = local_var_apikey.key.clone();
763			let local_var_value = match local_var_apikey.prefix {
764				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
765				None => local_var_key,
766			};
767			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
768		};
769
770		let local_var_req = local_var_req_builder.build()?;
771		let local_var_resp = local_var_client.execute(local_var_req).await?;
772
773		let local_var_status = local_var_resp.status();
774		let local_var_content = local_var_resp.text().await?;
775
776		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
777			serde_json::from_str(&local_var_content).map_err(Error::from)
778		} else {
779			let local_var_entity: Option<GetSearchOverrideError> = serde_json::from_str(&local_var_content).ok();
780			let local_var_error = ResponseContent {
781				status: local_var_status,
782				content: local_var_content,
783				entity: local_var_entity,
784			};
785			Err(Error::ResponseError(local_var_error))
786		}
787	}
788
789	async fn get_search_overrides(
790		&self,
791		params: GetSearchOverridesParams,
792	) -> Result<models::SearchOverridesResponse, Error<GetSearchOverridesError>> {
793		let GetSearchOverridesParams { collection_name } = params;
794
795		let local_var_configuration = &self.configuration;
796
797		let local_var_client = &local_var_configuration.client;
798
799		let local_var_uri_str = format!(
800			"{}/collections/{collectionName}/overrides",
801			local_var_configuration.base_path,
802			collectionName = crate::apis::urlencode(collection_name)
803		);
804		let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
805
806		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
807			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
808		}
809		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
810			let local_var_key = local_var_apikey.key.clone();
811			let local_var_value = match local_var_apikey.prefix {
812				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
813				None => local_var_key,
814			};
815			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
816		};
817
818		let local_var_req = local_var_req_builder.build()?;
819		let local_var_resp = local_var_client.execute(local_var_req).await?;
820
821		let local_var_status = local_var_resp.status();
822		let local_var_content = local_var_resp.text().await?;
823
824		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
825			serde_json::from_str(&local_var_content).map_err(Error::from)
826		} else {
827			let local_var_entity: Option<GetSearchOverridesError> = serde_json::from_str(&local_var_content).ok();
828			let local_var_error = ResponseContent {
829				status: local_var_status,
830				content: local_var_content,
831				entity: local_var_entity,
832			};
833			Err(Error::ResponseError(local_var_error))
834		}
835	}
836
837	/// Retrieve the details of a search synonym, given its id.
838	async fn get_search_synonym(
839		&self,
840		params: GetSearchSynonymParams,
841	) -> Result<models::SearchSynonym, Error<GetSearchSynonymError>> {
842		let GetSearchSynonymParams {
843			collection_name,
844			synonym_id,
845		} = params;
846
847		let local_var_configuration = &self.configuration;
848
849		let local_var_client = &local_var_configuration.client;
850
851		let local_var_uri_str = format!(
852			"{}/collections/{collectionName}/synonyms/{synonymId}",
853			local_var_configuration.base_path,
854			collectionName = crate::apis::urlencode(collection_name),
855			synonymId = crate::apis::urlencode(synonym_id)
856		);
857		let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
858
859		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
860			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
861		}
862		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
863			let local_var_key = local_var_apikey.key.clone();
864			let local_var_value = match local_var_apikey.prefix {
865				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
866				None => local_var_key,
867			};
868			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
869		};
870
871		let local_var_req = local_var_req_builder.build()?;
872		let local_var_resp = local_var_client.execute(local_var_req).await?;
873
874		let local_var_status = local_var_resp.status();
875		let local_var_content = local_var_resp.text().await?;
876
877		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
878			serde_json::from_str(&local_var_content).map_err(Error::from)
879		} else {
880			let local_var_entity: Option<GetSearchSynonymError> = serde_json::from_str(&local_var_content).ok();
881			let local_var_error = ResponseContent {
882				status: local_var_status,
883				content: local_var_content,
884				entity: local_var_entity,
885			};
886			Err(Error::ResponseError(local_var_error))
887		}
888	}
889
890	async fn get_search_synonyms(
891		&self,
892		params: GetSearchSynonymsParams,
893	) -> Result<models::SearchSynonymsResponse, Error<GetSearchSynonymsError>> {
894		let GetSearchSynonymsParams { collection_name } = params;
895
896		let local_var_configuration = &self.configuration;
897
898		let local_var_client = &local_var_configuration.client;
899
900		let local_var_uri_str = format!(
901			"{}/collections/{collectionName}/synonyms",
902			local_var_configuration.base_path,
903			collectionName = crate::apis::urlencode(collection_name)
904		);
905		let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
906
907		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
908			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
909		}
910		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
911			let local_var_key = local_var_apikey.key.clone();
912			let local_var_value = match local_var_apikey.prefix {
913				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
914				None => local_var_key,
915			};
916			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
917		};
918
919		let local_var_req = local_var_req_builder.build()?;
920		let local_var_resp = local_var_client.execute(local_var_req).await?;
921
922		let local_var_status = local_var_resp.status();
923		let local_var_content = local_var_resp.text().await?;
924
925		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
926			serde_json::from_str(&local_var_content).map_err(Error::from)
927		} else {
928			let local_var_entity: Option<GetSearchSynonymsError> = serde_json::from_str(&local_var_content).ok();
929			let local_var_error = ResponseContent {
930				status: local_var_status,
931				content: local_var_content,
932				entity: local_var_entity,
933			};
934			Err(Error::ResponseError(local_var_error))
935		}
936	}
937
938	/// The documents to be imported must be formatted in a newline delimited
939	/// JSON structure. You can feed the output file from a Typesense export
940	/// operation directly as import.
941	async fn import_documents(&self, params: ImportDocumentsParams) -> Result<String, Error<ImportDocumentsError>> {
942		let ImportDocumentsParams {
943			collection_name,
944			body,
945			batch_size,
946			return_id,
947			remote_embedding_batch_size,
948			return_doc,
949			action,
950			dirty_values,
951		} = params;
952
953		let local_var_configuration = &self.configuration;
954
955		let local_var_client = &local_var_configuration.client;
956
957		let local_var_uri_str = format!(
958			"{}/collections/{collectionName}/documents/import",
959			local_var_configuration.base_path,
960			collectionName = crate::apis::urlencode(collection_name)
961		);
962		let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
963
964		if let Some(ref local_var_str) = batch_size {
965			local_var_req_builder = local_var_req_builder.query(&[("batch_size", &local_var_str.to_string())]);
966		}
967		if let Some(ref local_var_str) = return_id {
968			local_var_req_builder = local_var_req_builder.query(&[("return_id", &local_var_str.to_string())]);
969		}
970		if let Some(ref local_var_str) = remote_embedding_batch_size {
971			local_var_req_builder =
972				local_var_req_builder.query(&[("remote_embedding_batch_size", &local_var_str.to_string())]);
973		}
974		if let Some(ref local_var_str) = return_doc {
975			local_var_req_builder = local_var_req_builder.query(&[("return_doc", &local_var_str.to_string())]);
976		}
977		if let Some(ref local_var_str) = action {
978			local_var_req_builder = local_var_req_builder.query(&[("action", &local_var_str.to_string())]);
979		}
980		if let Some(ref local_var_str) = dirty_values {
981			local_var_req_builder = local_var_req_builder.query(&[("dirty_values", &local_var_str.to_string())]);
982		}
983		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
984			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
985		}
986		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
987			let local_var_key = local_var_apikey.key.clone();
988			let local_var_value = match local_var_apikey.prefix {
989				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
990				None => local_var_key,
991			};
992			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
993		};
994		// Manually edited to send the body as a string
995		local_var_req_builder = local_var_req_builder.body(body);
996
997		let local_var_req = local_var_req_builder.build()?;
998		let local_var_resp = local_var_client.execute(local_var_req).await?;
999
1000		let local_var_status = local_var_resp.status();
1001		let local_var_content = local_var_resp.text().await?;
1002
1003		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1004			// Manually edited to return the content as a string
1005			Ok(local_var_content)
1006		} else {
1007			let local_var_entity: Option<ImportDocumentsError> = serde_json::from_str(&local_var_content).ok();
1008			let local_var_error = ResponseContent {
1009				status: local_var_status,
1010				content: local_var_content,
1011				entity: local_var_entity,
1012			};
1013			Err(Error::ResponseError(local_var_error))
1014		}
1015	}
1016
1017	/// A document to be indexed in a given collection must conform to the
1018	/// schema of the collection.
1019	async fn index_document(&self, params: IndexDocumentParams) -> Result<serde_json::Value, Error<IndexDocumentError>> {
1020		let IndexDocumentParams {
1021			collection_name,
1022			body,
1023			action,
1024			dirty_values,
1025		} = params;
1026
1027		let local_var_configuration = &self.configuration;
1028
1029		let local_var_client = &local_var_configuration.client;
1030
1031		let local_var_uri_str = format!(
1032			"{}/collections/{collectionName}/documents",
1033			local_var_configuration.base_path,
1034			collectionName = crate::apis::urlencode(collection_name)
1035		);
1036		let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
1037
1038		if let Some(ref local_var_str) = action {
1039			local_var_req_builder = local_var_req_builder.query(&[("action", &local_var_str.to_string())]);
1040		}
1041		if let Some(ref local_var_str) = dirty_values {
1042			local_var_req_builder = local_var_req_builder.query(&[("dirty_values", &local_var_str.to_string())]);
1043		}
1044		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1045			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1046		}
1047		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1048			let local_var_key = local_var_apikey.key.clone();
1049			let local_var_value = match local_var_apikey.prefix {
1050				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1051				None => local_var_key,
1052			};
1053			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
1054		};
1055		local_var_req_builder = local_var_req_builder.json(&body);
1056
1057		let local_var_req = local_var_req_builder.build()?;
1058		let local_var_resp = local_var_client.execute(local_var_req).await?;
1059
1060		let local_var_status = local_var_resp.status();
1061		let local_var_content = local_var_resp.text().await?;
1062
1063		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1064			serde_json::from_str(&local_var_content).map_err(Error::from)
1065		} else {
1066			let local_var_entity: Option<IndexDocumentError> = serde_json::from_str(&local_var_content).ok();
1067			let local_var_error = ResponseContent {
1068				status: local_var_status,
1069				content: local_var_content,
1070				entity: local_var_entity,
1071			};
1072			Err(Error::ResponseError(local_var_error))
1073		}
1074	}
1075
1076	/// This is especially useful to avoid round-trip network latencies incurred
1077	/// otherwise if each of these requests are sent in separate HTTP requests.
1078	/// You can also use this feature to do a federated search across multiple
1079	/// collections in a single HTTP request.
1080	async fn multi_search(&self, params: MultiSearchParams) -> Result<models::MultiSearchResult, Error<MultiSearchError>> {
1081		let MultiSearchParams {
1082			q,
1083			query_by,
1084			query_by_weights,
1085			text_match_type,
1086			prefix,
1087			infix,
1088			max_extra_prefix,
1089			max_extra_suffix,
1090			filter_by,
1091			sort_by,
1092			facet_by,
1093			max_facet_values,
1094			facet_query,
1095			num_typos,
1096			page,
1097			per_page,
1098			limit,
1099			offset,
1100			group_by,
1101			group_limit,
1102			group_missing_values,
1103			include_fields,
1104			exclude_fields,
1105			highlight_full_fields,
1106			highlight_affix_num_tokens,
1107			highlight_start_tag,
1108			highlight_end_tag,
1109			snippet_threshold,
1110			drop_tokens_threshold,
1111			drop_tokens_mode,
1112			typo_tokens_threshold,
1113			enable_typos_for_alpha_numerical_tokens,
1114			filter_curated_hits,
1115			enable_synonyms,
1116			synonym_prefix,
1117			synonym_num_typos,
1118			pinned_hits,
1119			hidden_hits,
1120			override_tags,
1121			highlight_fields,
1122			pre_segmented_query,
1123			preset,
1124			enable_overrides,
1125			prioritize_exact_match,
1126			prioritize_token_position,
1127			prioritize_num_matching_fields,
1128			enable_typos_for_numerical_tokens,
1129			exhaustive_search,
1130			search_cutoff_ms,
1131			use_cache,
1132			cache_ttl,
1133			min_len_1typo,
1134			min_len_2typo,
1135			vector_query,
1136			remote_embedding_timeout_ms,
1137			remote_embedding_num_tries,
1138			facet_strategy,
1139			stopwords,
1140			facet_return_parent,
1141			voice_query,
1142			conversation,
1143			conversation_model_id,
1144			conversation_id,
1145			multi_search_searches_parameter,
1146		} = params;
1147
1148		let local_var_configuration = &self.configuration;
1149
1150		let local_var_client = &local_var_configuration.client;
1151
1152		let local_var_uri_str = format!("{}/multi_search", local_var_configuration.base_path);
1153		let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
1154
1155		if let Some(ref local_var_str) = q {
1156			local_var_req_builder = local_var_req_builder.query(&[("q", &local_var_str.to_string())]);
1157		}
1158		if let Some(ref local_var_str) = query_by {
1159			local_var_req_builder = local_var_req_builder.query(&[("query_by", &local_var_str.to_string())]);
1160		}
1161		if let Some(ref local_var_str) = query_by_weights {
1162			local_var_req_builder = local_var_req_builder.query(&[("query_by_weights", &local_var_str.to_string())]);
1163		}
1164		if let Some(ref local_var_str) = text_match_type {
1165			local_var_req_builder = local_var_req_builder.query(&[("text_match_type", &local_var_str.to_string())]);
1166		}
1167		if let Some(ref local_var_str) = prefix {
1168			local_var_req_builder = local_var_req_builder.query(&[("prefix", &local_var_str.to_string())]);
1169		}
1170		if let Some(ref local_var_str) = infix {
1171			local_var_req_builder = local_var_req_builder.query(&[("infix", &local_var_str.to_string())]);
1172		}
1173		if let Some(ref local_var_str) = max_extra_prefix {
1174			local_var_req_builder = local_var_req_builder.query(&[("max_extra_prefix", &local_var_str.to_string())]);
1175		}
1176		if let Some(ref local_var_str) = max_extra_suffix {
1177			local_var_req_builder = local_var_req_builder.query(&[("max_extra_suffix", &local_var_str.to_string())]);
1178		}
1179		if let Some(ref local_var_str) = filter_by {
1180			local_var_req_builder = local_var_req_builder.query(&[("filter_by", &local_var_str.to_string())]);
1181		}
1182		if let Some(ref local_var_str) = sort_by {
1183			local_var_req_builder = local_var_req_builder.query(&[("sort_by", &local_var_str.to_string())]);
1184		}
1185		if let Some(ref local_var_str) = facet_by {
1186			local_var_req_builder = local_var_req_builder.query(&[("facet_by", &local_var_str.to_string())]);
1187		}
1188		if let Some(ref local_var_str) = max_facet_values {
1189			local_var_req_builder = local_var_req_builder.query(&[("max_facet_values", &local_var_str.to_string())]);
1190		}
1191		if let Some(ref local_var_str) = facet_query {
1192			local_var_req_builder = local_var_req_builder.query(&[("facet_query", &local_var_str.to_string())]);
1193		}
1194		if let Some(ref local_var_str) = num_typos {
1195			local_var_req_builder = local_var_req_builder.query(&[("num_typos", &local_var_str.to_string())]);
1196		}
1197		if let Some(ref local_var_str) = page {
1198			local_var_req_builder = local_var_req_builder.query(&[("page", &local_var_str.to_string())]);
1199		}
1200		if let Some(ref local_var_str) = per_page {
1201			local_var_req_builder = local_var_req_builder.query(&[("per_page", &local_var_str.to_string())]);
1202		}
1203		if let Some(ref local_var_str) = limit {
1204			local_var_req_builder = local_var_req_builder.query(&[("limit", &local_var_str.to_string())]);
1205		}
1206		if let Some(ref local_var_str) = offset {
1207			local_var_req_builder = local_var_req_builder.query(&[("offset", &local_var_str.to_string())]);
1208		}
1209		if let Some(ref local_var_str) = group_by {
1210			local_var_req_builder = local_var_req_builder.query(&[("group_by", &local_var_str.to_string())]);
1211		}
1212		if let Some(ref local_var_str) = group_limit {
1213			local_var_req_builder = local_var_req_builder.query(&[("group_limit", &local_var_str.to_string())]);
1214		}
1215		if let Some(ref local_var_str) = group_missing_values {
1216			local_var_req_builder = local_var_req_builder.query(&[("group_missing_values", &local_var_str.to_string())]);
1217		}
1218		if let Some(ref local_var_str) = include_fields {
1219			local_var_req_builder = local_var_req_builder.query(&[("include_fields", &local_var_str.to_string())]);
1220		}
1221		if let Some(ref local_var_str) = exclude_fields {
1222			local_var_req_builder = local_var_req_builder.query(&[("exclude_fields", &local_var_str.to_string())]);
1223		}
1224		if let Some(ref local_var_str) = highlight_full_fields {
1225			local_var_req_builder = local_var_req_builder.query(&[("highlight_full_fields", &local_var_str.to_string())]);
1226		}
1227		if let Some(ref local_var_str) = highlight_affix_num_tokens {
1228			local_var_req_builder =
1229				local_var_req_builder.query(&[("highlight_affix_num_tokens", &local_var_str.to_string())]);
1230		}
1231		if let Some(ref local_var_str) = highlight_start_tag {
1232			local_var_req_builder = local_var_req_builder.query(&[("highlight_start_tag", &local_var_str.to_string())]);
1233		}
1234		if let Some(ref local_var_str) = highlight_end_tag {
1235			local_var_req_builder = local_var_req_builder.query(&[("highlight_end_tag", &local_var_str.to_string())]);
1236		}
1237		if let Some(ref local_var_str) = snippet_threshold {
1238			local_var_req_builder = local_var_req_builder.query(&[("snippet_threshold", &local_var_str.to_string())]);
1239		}
1240		if let Some(ref local_var_str) = drop_tokens_threshold {
1241			local_var_req_builder = local_var_req_builder.query(&[("drop_tokens_threshold", &local_var_str.to_string())]);
1242		}
1243		if let Some(ref local_var_str) = drop_tokens_mode {
1244			local_var_req_builder = local_var_req_builder.query(&[("drop_tokens_mode", &local_var_str.to_string())]);
1245		}
1246		if let Some(ref local_var_str) = typo_tokens_threshold {
1247			local_var_req_builder = local_var_req_builder.query(&[("typo_tokens_threshold", &local_var_str.to_string())]);
1248		}
1249		if let Some(ref local_var_str) = enable_typos_for_alpha_numerical_tokens {
1250			local_var_req_builder =
1251				local_var_req_builder.query(&[("enable_typos_for_alpha_numerical_tokens", &local_var_str.to_string())]);
1252		}
1253		if let Some(ref local_var_str) = filter_curated_hits {
1254			local_var_req_builder = local_var_req_builder.query(&[("filter_curated_hits", &local_var_str.to_string())]);
1255		}
1256		if let Some(ref local_var_str) = enable_synonyms {
1257			local_var_req_builder = local_var_req_builder.query(&[("enable_synonyms", &local_var_str.to_string())]);
1258		}
1259		if let Some(ref local_var_str) = synonym_prefix {
1260			local_var_req_builder = local_var_req_builder.query(&[("synonym_prefix", &local_var_str.to_string())]);
1261		}
1262		if let Some(ref local_var_str) = synonym_num_typos {
1263			local_var_req_builder = local_var_req_builder.query(&[("synonym_num_typos", &local_var_str.to_string())]);
1264		}
1265		if let Some(ref local_var_str) = pinned_hits {
1266			local_var_req_builder = local_var_req_builder.query(&[("pinned_hits", &local_var_str.to_string())]);
1267		}
1268		if let Some(ref local_var_str) = hidden_hits {
1269			local_var_req_builder = local_var_req_builder.query(&[("hidden_hits", &local_var_str.to_string())]);
1270		}
1271		if let Some(ref local_var_str) = override_tags {
1272			local_var_req_builder = local_var_req_builder.query(&[("override_tags", &local_var_str.to_string())]);
1273		}
1274		if let Some(ref local_var_str) = highlight_fields {
1275			local_var_req_builder = local_var_req_builder.query(&[("highlight_fields", &local_var_str.to_string())]);
1276		}
1277		if let Some(ref local_var_str) = pre_segmented_query {
1278			local_var_req_builder = local_var_req_builder.query(&[("pre_segmented_query", &local_var_str.to_string())]);
1279		}
1280		if let Some(ref local_var_str) = preset {
1281			local_var_req_builder = local_var_req_builder.query(&[("preset", &local_var_str.to_string())]);
1282		}
1283		if let Some(ref local_var_str) = enable_overrides {
1284			local_var_req_builder = local_var_req_builder.query(&[("enable_overrides", &local_var_str.to_string())]);
1285		}
1286		if let Some(ref local_var_str) = prioritize_exact_match {
1287			local_var_req_builder = local_var_req_builder.query(&[("prioritize_exact_match", &local_var_str.to_string())]);
1288		}
1289		if let Some(ref local_var_str) = prioritize_token_position {
1290			local_var_req_builder =
1291				local_var_req_builder.query(&[("prioritize_token_position", &local_var_str.to_string())]);
1292		}
1293		if let Some(ref local_var_str) = prioritize_num_matching_fields {
1294			local_var_req_builder =
1295				local_var_req_builder.query(&[("prioritize_num_matching_fields", &local_var_str.to_string())]);
1296		}
1297		if let Some(ref local_var_str) = enable_typos_for_numerical_tokens {
1298			local_var_req_builder =
1299				local_var_req_builder.query(&[("enable_typos_for_numerical_tokens", &local_var_str.to_string())]);
1300		}
1301		if let Some(ref local_var_str) = exhaustive_search {
1302			local_var_req_builder = local_var_req_builder.query(&[("exhaustive_search", &local_var_str.to_string())]);
1303		}
1304		if let Some(ref local_var_str) = search_cutoff_ms {
1305			local_var_req_builder = local_var_req_builder.query(&[("search_cutoff_ms", &local_var_str.to_string())]);
1306		}
1307		if let Some(ref local_var_str) = use_cache {
1308			local_var_req_builder = local_var_req_builder.query(&[("use_cache", &local_var_str.to_string())]);
1309		}
1310		if let Some(ref local_var_str) = cache_ttl {
1311			local_var_req_builder = local_var_req_builder.query(&[("cache_ttl", &local_var_str.to_string())]);
1312		}
1313		if let Some(ref local_var_str) = min_len_1typo {
1314			local_var_req_builder = local_var_req_builder.query(&[("min_len_1typo", &local_var_str.to_string())]);
1315		}
1316		if let Some(ref local_var_str) = min_len_2typo {
1317			local_var_req_builder = local_var_req_builder.query(&[("min_len_2typo", &local_var_str.to_string())]);
1318		}
1319		if let Some(ref local_var_str) = vector_query {
1320			local_var_req_builder = local_var_req_builder.query(&[("vector_query", &local_var_str.to_string())]);
1321		}
1322		if let Some(ref local_var_str) = remote_embedding_timeout_ms {
1323			local_var_req_builder =
1324				local_var_req_builder.query(&[("remote_embedding_timeout_ms", &local_var_str.to_string())]);
1325		}
1326		if let Some(ref local_var_str) = remote_embedding_num_tries {
1327			local_var_req_builder =
1328				local_var_req_builder.query(&[("remote_embedding_num_tries", &local_var_str.to_string())]);
1329		}
1330		if let Some(ref local_var_str) = facet_strategy {
1331			local_var_req_builder = local_var_req_builder.query(&[("facet_strategy", &local_var_str.to_string())]);
1332		}
1333		if let Some(ref local_var_str) = stopwords {
1334			local_var_req_builder = local_var_req_builder.query(&[("stopwords", &local_var_str.to_string())]);
1335		}
1336		if let Some(ref local_var_str) = facet_return_parent {
1337			local_var_req_builder = local_var_req_builder.query(&[("facet_return_parent", &local_var_str.to_string())]);
1338		}
1339		if let Some(ref local_var_str) = voice_query {
1340			local_var_req_builder = local_var_req_builder.query(&[("voice_query", &local_var_str.to_string())]);
1341		}
1342		if let Some(ref local_var_str) = conversation {
1343			local_var_req_builder = local_var_req_builder.query(&[("conversation", &local_var_str.to_string())]);
1344		}
1345		if let Some(ref local_var_str) = conversation_model_id {
1346			local_var_req_builder = local_var_req_builder.query(&[("conversation_model_id", &local_var_str.to_string())]);
1347		}
1348		if let Some(ref local_var_str) = conversation_id {
1349			local_var_req_builder = local_var_req_builder.query(&[("conversation_id", &local_var_str.to_string())]);
1350		}
1351		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1352			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1353		}
1354		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1355			let local_var_key = local_var_apikey.key.clone();
1356			let local_var_value = match local_var_apikey.prefix {
1357				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1358				None => local_var_key,
1359			};
1360			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
1361		};
1362		local_var_req_builder = local_var_req_builder.json(&multi_search_searches_parameter);
1363
1364		let local_var_req = local_var_req_builder.build()?;
1365		let local_var_resp = local_var_client.execute(local_var_req).await?;
1366
1367		let local_var_status = local_var_resp.status();
1368		let local_var_content = local_var_resp.text().await?;
1369
1370		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1371			serde_json::from_str(&local_var_content).map_err(Error::from)
1372		} else {
1373			let local_var_entity: Option<MultiSearchError> = serde_json::from_str(&local_var_content).ok();
1374			let local_var_error = ResponseContent {
1375				status: local_var_status,
1376				content: local_var_content,
1377				entity: local_var_entity,
1378			};
1379			Err(Error::ResponseError(local_var_error))
1380		}
1381	}
1382
1383	/// Search for documents in a collection that match the search criteria.
1384	async fn search_collection(
1385		&self,
1386		params: SearchCollectionParams,
1387	) -> Result<models::SearchResult, Error<SearchCollectionError>> {
1388		let SearchCollectionParams {
1389			collection_name,
1390			q,
1391			query_by,
1392			query_by_weights,
1393			text_match_type,
1394			prefix,
1395			infix,
1396			max_extra_prefix,
1397			max_extra_suffix,
1398			filter_by,
1399			sort_by,
1400			facet_by,
1401			max_facet_values,
1402			facet_query,
1403			num_typos,
1404			page,
1405			per_page,
1406			limit,
1407			offset,
1408			group_by,
1409			group_limit,
1410			group_missing_values,
1411			include_fields,
1412			exclude_fields,
1413			highlight_full_fields,
1414			highlight_affix_num_tokens,
1415			highlight_start_tag,
1416			highlight_end_tag,
1417			enable_highlight_v1,
1418			snippet_threshold,
1419			drop_tokens_threshold,
1420			drop_tokens_mode,
1421			typo_tokens_threshold,
1422			enable_typos_for_alpha_numerical_tokens,
1423			filter_curated_hits,
1424			enable_synonyms,
1425			synonym_prefix,
1426			synonym_num_typos,
1427			pinned_hits,
1428			hidden_hits,
1429			override_tags,
1430			highlight_fields,
1431			split_join_tokens,
1432			pre_segmented_query,
1433			preset,
1434			enable_overrides,
1435			prioritize_exact_match,
1436			max_candidates,
1437			prioritize_token_position,
1438			prioritize_num_matching_fields,
1439			enable_typos_for_numerical_tokens,
1440			exhaustive_search,
1441			search_cutoff_ms,
1442			use_cache,
1443			cache_ttl,
1444			min_len_1typo,
1445			min_len_2typo,
1446			vector_query,
1447			remote_embedding_timeout_ms,
1448			remote_embedding_num_tries,
1449			facet_strategy,
1450			stopwords,
1451			facet_return_parent,
1452			voice_query,
1453			conversation,
1454			conversation_model_id,
1455			conversation_id,
1456		} = params;
1457
1458		let local_var_configuration = &self.configuration;
1459
1460		let local_var_client = &local_var_configuration.client;
1461
1462		let local_var_uri_str = format!(
1463			"{}/collections/{collectionName}/documents/search",
1464			local_var_configuration.base_path,
1465			collectionName = crate::apis::urlencode(collection_name)
1466		);
1467		let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
1468
1469		local_var_req_builder = local_var_req_builder.query(&[("q", &q.to_string())]);
1470		local_var_req_builder = local_var_req_builder.query(&[("query_by", &query_by.to_string())]);
1471		if let Some(ref local_var_str) = query_by_weights {
1472			local_var_req_builder = local_var_req_builder.query(&[("query_by_weights", &local_var_str.to_string())]);
1473		}
1474		if let Some(ref local_var_str) = text_match_type {
1475			local_var_req_builder = local_var_req_builder.query(&[("text_match_type", &local_var_str.to_string())]);
1476		}
1477		if let Some(ref local_var_str) = prefix {
1478			local_var_req_builder = local_var_req_builder.query(&[("prefix", &local_var_str.to_string())]);
1479		}
1480		if let Some(ref local_var_str) = infix {
1481			local_var_req_builder = local_var_req_builder.query(&[("infix", &local_var_str.to_string())]);
1482		}
1483		if let Some(ref local_var_str) = max_extra_prefix {
1484			local_var_req_builder = local_var_req_builder.query(&[("max_extra_prefix", &local_var_str.to_string())]);
1485		}
1486		if let Some(ref local_var_str) = max_extra_suffix {
1487			local_var_req_builder = local_var_req_builder.query(&[("max_extra_suffix", &local_var_str.to_string())]);
1488		}
1489		if let Some(ref local_var_str) = filter_by {
1490			local_var_req_builder = local_var_req_builder.query(&[("filter_by", &local_var_str.to_string())]);
1491		}
1492		if let Some(ref local_var_str) = sort_by {
1493			local_var_req_builder = local_var_req_builder.query(&[("sort_by", &local_var_str.to_string())]);
1494		}
1495		if let Some(ref local_var_str) = facet_by {
1496			local_var_req_builder = local_var_req_builder.query(&[("facet_by", &local_var_str.to_string())]);
1497		}
1498		if let Some(ref local_var_str) = max_facet_values {
1499			local_var_req_builder = local_var_req_builder.query(&[("max_facet_values", &local_var_str.to_string())]);
1500		}
1501		if let Some(ref local_var_str) = facet_query {
1502			local_var_req_builder = local_var_req_builder.query(&[("facet_query", &local_var_str.to_string())]);
1503		}
1504		if let Some(ref local_var_str) = num_typos {
1505			local_var_req_builder = local_var_req_builder.query(&[("num_typos", &local_var_str.to_string())]);
1506		}
1507		if let Some(ref local_var_str) = page {
1508			local_var_req_builder = local_var_req_builder.query(&[("page", &local_var_str.to_string())]);
1509		}
1510		if let Some(ref local_var_str) = per_page {
1511			local_var_req_builder = local_var_req_builder.query(&[("per_page", &local_var_str.to_string())]);
1512		}
1513		if let Some(ref local_var_str) = limit {
1514			local_var_req_builder = local_var_req_builder.query(&[("limit", &local_var_str.to_string())]);
1515		}
1516		if let Some(ref local_var_str) = offset {
1517			local_var_req_builder = local_var_req_builder.query(&[("offset", &local_var_str.to_string())]);
1518		}
1519		if let Some(ref local_var_str) = group_by {
1520			local_var_req_builder = local_var_req_builder.query(&[("group_by", &local_var_str.to_string())]);
1521		}
1522		if let Some(ref local_var_str) = group_limit {
1523			local_var_req_builder = local_var_req_builder.query(&[("group_limit", &local_var_str.to_string())]);
1524		}
1525		if let Some(ref local_var_str) = group_missing_values {
1526			local_var_req_builder = local_var_req_builder.query(&[("group_missing_values", &local_var_str.to_string())]);
1527		}
1528		if let Some(ref local_var_str) = include_fields {
1529			local_var_req_builder = local_var_req_builder.query(&[("include_fields", &local_var_str.to_string())]);
1530		}
1531		if let Some(ref local_var_str) = exclude_fields {
1532			local_var_req_builder = local_var_req_builder.query(&[("exclude_fields", &local_var_str.to_string())]);
1533		}
1534		if let Some(ref local_var_str) = highlight_full_fields {
1535			local_var_req_builder = local_var_req_builder.query(&[("highlight_full_fields", &local_var_str.to_string())]);
1536		}
1537		if let Some(ref local_var_str) = highlight_affix_num_tokens {
1538			local_var_req_builder =
1539				local_var_req_builder.query(&[("highlight_affix_num_tokens", &local_var_str.to_string())]);
1540		}
1541		if let Some(ref local_var_str) = highlight_start_tag {
1542			local_var_req_builder = local_var_req_builder.query(&[("highlight_start_tag", &local_var_str.to_string())]);
1543		}
1544		if let Some(ref local_var_str) = highlight_end_tag {
1545			local_var_req_builder = local_var_req_builder.query(&[("highlight_end_tag", &local_var_str.to_string())]);
1546		}
1547		if let Some(ref local_var_str) = enable_highlight_v1 {
1548			local_var_req_builder = local_var_req_builder.query(&[("enable_highlight_v1", &local_var_str.to_string())]);
1549		}
1550		if let Some(ref local_var_str) = snippet_threshold {
1551			local_var_req_builder = local_var_req_builder.query(&[("snippet_threshold", &local_var_str.to_string())]);
1552		}
1553		if let Some(ref local_var_str) = drop_tokens_threshold {
1554			local_var_req_builder = local_var_req_builder.query(&[("drop_tokens_threshold", &local_var_str.to_string())]);
1555		}
1556		if let Some(ref local_var_str) = drop_tokens_mode {
1557			local_var_req_builder = local_var_req_builder.query(&[("drop_tokens_mode", &local_var_str.to_string())]);
1558		}
1559		if let Some(ref local_var_str) = typo_tokens_threshold {
1560			local_var_req_builder = local_var_req_builder.query(&[("typo_tokens_threshold", &local_var_str.to_string())]);
1561		}
1562		if let Some(ref local_var_str) = enable_typos_for_alpha_numerical_tokens {
1563			local_var_req_builder =
1564				local_var_req_builder.query(&[("enable_typos_for_alpha_numerical_tokens", &local_var_str.to_string())]);
1565		}
1566		if let Some(ref local_var_str) = filter_curated_hits {
1567			local_var_req_builder = local_var_req_builder.query(&[("filter_curated_hits", &local_var_str.to_string())]);
1568		}
1569		if let Some(ref local_var_str) = enable_synonyms {
1570			local_var_req_builder = local_var_req_builder.query(&[("enable_synonyms", &local_var_str.to_string())]);
1571		}
1572		if let Some(ref local_var_str) = synonym_prefix {
1573			local_var_req_builder = local_var_req_builder.query(&[("synonym_prefix", &local_var_str.to_string())]);
1574		}
1575		if let Some(ref local_var_str) = synonym_num_typos {
1576			local_var_req_builder = local_var_req_builder.query(&[("synonym_num_typos", &local_var_str.to_string())]);
1577		}
1578		if let Some(ref local_var_str) = pinned_hits {
1579			local_var_req_builder = local_var_req_builder.query(&[("pinned_hits", &local_var_str.to_string())]);
1580		}
1581		if let Some(ref local_var_str) = hidden_hits {
1582			local_var_req_builder = local_var_req_builder.query(&[("hidden_hits", &local_var_str.to_string())]);
1583		}
1584		if let Some(ref local_var_str) = override_tags {
1585			local_var_req_builder = local_var_req_builder.query(&[("override_tags", &local_var_str.to_string())]);
1586		}
1587		if let Some(ref local_var_str) = highlight_fields {
1588			local_var_req_builder = local_var_req_builder.query(&[("highlight_fields", &local_var_str.to_string())]);
1589		}
1590		if let Some(ref local_var_str) = split_join_tokens {
1591			local_var_req_builder = local_var_req_builder.query(&[("split_join_tokens", &local_var_str.to_string())]);
1592		}
1593		if let Some(ref local_var_str) = pre_segmented_query {
1594			local_var_req_builder = local_var_req_builder.query(&[("pre_segmented_query", &local_var_str.to_string())]);
1595		}
1596		if let Some(ref local_var_str) = preset {
1597			local_var_req_builder = local_var_req_builder.query(&[("preset", &local_var_str.to_string())]);
1598		}
1599		if let Some(ref local_var_str) = enable_overrides {
1600			local_var_req_builder = local_var_req_builder.query(&[("enable_overrides", &local_var_str.to_string())]);
1601		}
1602		if let Some(ref local_var_str) = prioritize_exact_match {
1603			local_var_req_builder = local_var_req_builder.query(&[("prioritize_exact_match", &local_var_str.to_string())]);
1604		}
1605		if let Some(ref local_var_str) = max_candidates {
1606			local_var_req_builder = local_var_req_builder.query(&[("max_candidates", &local_var_str.to_string())]);
1607		}
1608		if let Some(ref local_var_str) = prioritize_token_position {
1609			local_var_req_builder =
1610				local_var_req_builder.query(&[("prioritize_token_position", &local_var_str.to_string())]);
1611		}
1612		if let Some(ref local_var_str) = prioritize_num_matching_fields {
1613			local_var_req_builder =
1614				local_var_req_builder.query(&[("prioritize_num_matching_fields", &local_var_str.to_string())]);
1615		}
1616		if let Some(ref local_var_str) = enable_typos_for_numerical_tokens {
1617			local_var_req_builder =
1618				local_var_req_builder.query(&[("enable_typos_for_numerical_tokens", &local_var_str.to_string())]);
1619		}
1620		if let Some(ref local_var_str) = exhaustive_search {
1621			local_var_req_builder = local_var_req_builder.query(&[("exhaustive_search", &local_var_str.to_string())]);
1622		}
1623		if let Some(ref local_var_str) = search_cutoff_ms {
1624			local_var_req_builder = local_var_req_builder.query(&[("search_cutoff_ms", &local_var_str.to_string())]);
1625		}
1626		if let Some(ref local_var_str) = use_cache {
1627			local_var_req_builder = local_var_req_builder.query(&[("use_cache", &local_var_str.to_string())]);
1628		}
1629		if let Some(ref local_var_str) = cache_ttl {
1630			local_var_req_builder = local_var_req_builder.query(&[("cache_ttl", &local_var_str.to_string())]);
1631		}
1632		if let Some(ref local_var_str) = min_len_1typo {
1633			local_var_req_builder = local_var_req_builder.query(&[("min_len_1typo", &local_var_str.to_string())]);
1634		}
1635		if let Some(ref local_var_str) = min_len_2typo {
1636			local_var_req_builder = local_var_req_builder.query(&[("min_len_2typo", &local_var_str.to_string())]);
1637		}
1638		if let Some(ref local_var_str) = vector_query {
1639			local_var_req_builder = local_var_req_builder.query(&[("vector_query", &local_var_str.to_string())]);
1640		}
1641		if let Some(ref local_var_str) = remote_embedding_timeout_ms {
1642			local_var_req_builder =
1643				local_var_req_builder.query(&[("remote_embedding_timeout_ms", &local_var_str.to_string())]);
1644		}
1645		if let Some(ref local_var_str) = remote_embedding_num_tries {
1646			local_var_req_builder =
1647				local_var_req_builder.query(&[("remote_embedding_num_tries", &local_var_str.to_string())]);
1648		}
1649		if let Some(ref local_var_str) = facet_strategy {
1650			local_var_req_builder = local_var_req_builder.query(&[("facet_strategy", &local_var_str.to_string())]);
1651		}
1652		if let Some(ref local_var_str) = stopwords {
1653			local_var_req_builder = local_var_req_builder.query(&[("stopwords", &local_var_str.to_string())]);
1654		}
1655		if let Some(ref local_var_str) = facet_return_parent {
1656			local_var_req_builder = local_var_req_builder.query(&[("facet_return_parent", &local_var_str.to_string())]);
1657		}
1658		if let Some(ref local_var_str) = voice_query {
1659			local_var_req_builder = local_var_req_builder.query(&[("voice_query", &local_var_str.to_string())]);
1660		}
1661		if let Some(ref local_var_str) = conversation {
1662			local_var_req_builder = local_var_req_builder.query(&[("conversation", &local_var_str.to_string())]);
1663		}
1664		if let Some(ref local_var_str) = conversation_model_id {
1665			local_var_req_builder = local_var_req_builder.query(&[("conversation_model_id", &local_var_str.to_string())]);
1666		}
1667		if let Some(ref local_var_str) = conversation_id {
1668			local_var_req_builder = local_var_req_builder.query(&[("conversation_id", &local_var_str.to_string())]);
1669		}
1670		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1671			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1672		}
1673		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1674			let local_var_key = local_var_apikey.key.clone();
1675			let local_var_value = match local_var_apikey.prefix {
1676				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1677				None => local_var_key,
1678			};
1679			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
1680		};
1681
1682		let local_var_req = local_var_req_builder.build()?;
1683		let local_var_resp = local_var_client.execute(local_var_req).await?;
1684
1685		let local_var_status = local_var_resp.status();
1686		let local_var_content = local_var_resp.text().await?;
1687
1688		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1689			serde_json::from_str(&local_var_content).map_err(Error::from)
1690		} else {
1691			let local_var_entity: Option<SearchCollectionError> = serde_json::from_str(&local_var_content).ok();
1692			let local_var_error = ResponseContent {
1693				status: local_var_status,
1694				content: local_var_content,
1695				entity: local_var_entity,
1696			};
1697			Err(Error::ResponseError(local_var_error))
1698		}
1699	}
1700
1701	/// Update an individual document from a collection by using its ID. The
1702	/// update can be partial.
1703	async fn update_document(&self, params: UpdateDocumentParams) -> Result<serde_json::Value, Error<UpdateDocumentError>> {
1704		let UpdateDocumentParams {
1705			collection_name,
1706			document_id,
1707			body,
1708			dirty_values,
1709		} = params;
1710
1711		let local_var_configuration = &self.configuration;
1712
1713		let local_var_client = &local_var_configuration.client;
1714
1715		let local_var_uri_str = format!(
1716			"{}/collections/{collectionName}/documents/{documentId}",
1717			local_var_configuration.base_path,
1718			collectionName = crate::apis::urlencode(collection_name),
1719			documentId = crate::apis::urlencode(document_id)
1720		);
1721		let mut local_var_req_builder = local_var_client.request(reqwest::Method::PATCH, local_var_uri_str.as_str());
1722
1723		if let Some(ref local_var_str) = dirty_values {
1724			local_var_req_builder = local_var_req_builder.query(&[("dirty_values", &local_var_str.to_string())]);
1725		}
1726		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1727			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1728		}
1729		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1730			let local_var_key = local_var_apikey.key.clone();
1731			let local_var_value = match local_var_apikey.prefix {
1732				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1733				None => local_var_key,
1734			};
1735			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
1736		};
1737		local_var_req_builder = local_var_req_builder.json(&body);
1738
1739		let local_var_req = local_var_req_builder.build()?;
1740		let local_var_resp = local_var_client.execute(local_var_req).await?;
1741
1742		let local_var_status = local_var_resp.status();
1743		let local_var_content = local_var_resp.text().await?;
1744
1745		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1746			serde_json::from_str(&local_var_content).map_err(Error::from)
1747		} else {
1748			let local_var_entity: Option<UpdateDocumentError> = serde_json::from_str(&local_var_content).ok();
1749			let local_var_error = ResponseContent {
1750				status: local_var_status,
1751				content: local_var_content,
1752				entity: local_var_entity,
1753			};
1754			Err(Error::ResponseError(local_var_error))
1755		}
1756	}
1757
1758	/// The filter_by query parameter is used to filter to specify a condition
1759	/// against which the documents are matched. The request body contains the
1760	/// fields that should be updated for any documents that match the filter
1761	/// condition. This endpoint is only available if the Typesense server is
1762	/// version `0.25.0.rc12` or later.
1763	async fn update_documents(
1764		&self,
1765		params: UpdateDocumentsParams,
1766	) -> Result<models::UpdateDocuments200Response, Error<UpdateDocumentsError>> {
1767		let UpdateDocumentsParams {
1768			collection_name,
1769			body,
1770			filter_by,
1771		} = params;
1772
1773		let local_var_configuration = &self.configuration;
1774
1775		let local_var_client = &local_var_configuration.client;
1776
1777		let local_var_uri_str = format!(
1778			"{}/collections/{collectionName}/documents",
1779			local_var_configuration.base_path,
1780			collectionName = crate::apis::urlencode(collection_name)
1781		);
1782		let mut local_var_req_builder = local_var_client.request(reqwest::Method::PATCH, local_var_uri_str.as_str());
1783
1784		if let Some(ref local_var_str) = filter_by {
1785			local_var_req_builder = local_var_req_builder.query(&[("filter_by", &local_var_str.to_string())]);
1786		}
1787		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1788			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1789		}
1790		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1791			let local_var_key = local_var_apikey.key.clone();
1792			let local_var_value = match local_var_apikey.prefix {
1793				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1794				None => local_var_key,
1795			};
1796			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
1797		};
1798		local_var_req_builder = local_var_req_builder.json(&body);
1799
1800		let local_var_req = local_var_req_builder.build()?;
1801		let local_var_resp = local_var_client.execute(local_var_req).await?;
1802
1803		let local_var_status = local_var_resp.status();
1804		let local_var_content = local_var_resp.text().await?;
1805
1806		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1807			serde_json::from_str(&local_var_content).map_err(Error::from)
1808		} else {
1809			let local_var_entity: Option<UpdateDocumentsError> = serde_json::from_str(&local_var_content).ok();
1810			let local_var_error = ResponseContent {
1811				status: local_var_status,
1812				content: local_var_content,
1813				entity: local_var_entity,
1814			};
1815			Err(Error::ResponseError(local_var_error))
1816		}
1817	}
1818
1819	/// Create or update an override to promote certain documents over others.
1820	/// Using overrides, you can include or exclude specific documents for a
1821	/// given query.
1822	async fn upsert_search_override(
1823		&self,
1824		params: UpsertSearchOverrideParams,
1825	) -> Result<models::SearchOverride, Error<UpsertSearchOverrideError>> {
1826		let UpsertSearchOverrideParams {
1827			collection_name,
1828			override_id,
1829			search_override_schema,
1830		} = params;
1831
1832		let local_var_configuration = &self.configuration;
1833
1834		let local_var_client = &local_var_configuration.client;
1835
1836		let local_var_uri_str = format!(
1837			"{}/collections/{collectionName}/overrides/{overrideId}",
1838			local_var_configuration.base_path,
1839			collectionName = crate::apis::urlencode(collection_name),
1840			overrideId = crate::apis::urlencode(override_id)
1841		);
1842		let mut local_var_req_builder = local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
1843
1844		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1845			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1846		}
1847		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1848			let local_var_key = local_var_apikey.key.clone();
1849			let local_var_value = match local_var_apikey.prefix {
1850				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1851				None => local_var_key,
1852			};
1853			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
1854		};
1855		local_var_req_builder = local_var_req_builder.json(&search_override_schema);
1856
1857		let local_var_req = local_var_req_builder.build()?;
1858		let local_var_resp = local_var_client.execute(local_var_req).await?;
1859
1860		let local_var_status = local_var_resp.status();
1861		let local_var_content = local_var_resp.text().await?;
1862
1863		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1864			serde_json::from_str(&local_var_content).map_err(Error::from)
1865		} else {
1866			let local_var_entity: Option<UpsertSearchOverrideError> = serde_json::from_str(&local_var_content).ok();
1867			let local_var_error = ResponseContent {
1868				status: local_var_status,
1869				content: local_var_content,
1870				entity: local_var_entity,
1871			};
1872			Err(Error::ResponseError(local_var_error))
1873		}
1874	}
1875
1876	/// Create or update a synonym  to define search terms that should be
1877	/// considered equivalent.
1878	async fn upsert_search_synonym(
1879		&self,
1880		params: UpsertSearchSynonymParams,
1881	) -> Result<models::SearchSynonym, Error<UpsertSearchSynonymError>> {
1882		let UpsertSearchSynonymParams {
1883			collection_name,
1884			synonym_id,
1885			search_synonym_schema,
1886		} = params;
1887
1888		let local_var_configuration = &self.configuration;
1889
1890		let local_var_client = &local_var_configuration.client;
1891
1892		let local_var_uri_str = format!(
1893			"{}/collections/{collectionName}/synonyms/{synonymId}",
1894			local_var_configuration.base_path,
1895			collectionName = crate::apis::urlencode(collection_name),
1896			synonymId = crate::apis::urlencode(synonym_id)
1897		);
1898		let mut local_var_req_builder = local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
1899
1900		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1901			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1902		}
1903		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1904			let local_var_key = local_var_apikey.key.clone();
1905			let local_var_value = match local_var_apikey.prefix {
1906				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1907				None => local_var_key,
1908			};
1909			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
1910		};
1911		local_var_req_builder = local_var_req_builder.json(&search_synonym_schema);
1912
1913		let local_var_req = local_var_req_builder.build()?;
1914		let local_var_resp = local_var_client.execute(local_var_req).await?;
1915
1916		let local_var_status = local_var_resp.status();
1917		let local_var_content = local_var_resp.text().await?;
1918
1919		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1920			serde_json::from_str(&local_var_content).map_err(Error::from)
1921		} else {
1922			let local_var_entity: Option<UpsertSearchSynonymError> = serde_json::from_str(&local_var_content).ok();
1923			let local_var_error = ResponseContent {
1924				status: local_var_status,
1925				content: local_var_content,
1926				entity: local_var_entity,
1927			};
1928			Err(Error::ResponseError(local_var_error))
1929		}
1930	}
1931}
1932
1933/// struct for typed errors of method [`delete_document`]
1934#[derive(Debug, Clone, Serialize, Deserialize)]
1935#[serde(untagged)]
1936pub enum DeleteDocumentError {
1937	Status404(models::ApiResponse),
1938	UnknownValue(serde_json::Value),
1939}
1940
1941/// struct for typed errors of method [`delete_documents`]
1942#[derive(Debug, Clone, Serialize, Deserialize)]
1943#[serde(untagged)]
1944pub enum DeleteDocumentsError {
1945	Status404(models::ApiResponse),
1946	UnknownValue(serde_json::Value),
1947}
1948
1949/// struct for typed errors of method [`delete_search_override`]
1950#[derive(Debug, Clone, Serialize, Deserialize)]
1951#[serde(untagged)]
1952pub enum DeleteSearchOverrideError {
1953	Status404(models::ApiResponse),
1954	UnknownValue(serde_json::Value),
1955}
1956
1957/// struct for typed errors of method [`delete_search_synonym`]
1958#[derive(Debug, Clone, Serialize, Deserialize)]
1959#[serde(untagged)]
1960pub enum DeleteSearchSynonymError {
1961	Status404(models::ApiResponse),
1962	UnknownValue(serde_json::Value),
1963}
1964
1965/// struct for typed errors of method [`export_documents`]
1966#[derive(Debug, Clone, Serialize, Deserialize)]
1967#[serde(untagged)]
1968pub enum ExportDocumentsError {
1969	Status404(models::ApiResponse),
1970	UnknownValue(serde_json::Value),
1971}
1972
1973/// struct for typed errors of method [`get_document`]
1974#[derive(Debug, Clone, Serialize, Deserialize)]
1975#[serde(untagged)]
1976pub enum GetDocumentError {
1977	Status404(models::ApiResponse),
1978	UnknownValue(serde_json::Value),
1979}
1980
1981/// struct for typed errors of method [`get_search_override`]
1982#[derive(Debug, Clone, Serialize, Deserialize)]
1983#[serde(untagged)]
1984pub enum GetSearchOverrideError {
1985	UnknownValue(serde_json::Value),
1986}
1987
1988/// struct for typed errors of method [`get_search_overrides`]
1989#[derive(Debug, Clone, Serialize, Deserialize)]
1990#[serde(untagged)]
1991pub enum GetSearchOverridesError {
1992	UnknownValue(serde_json::Value),
1993}
1994
1995/// struct for typed errors of method [`get_search_synonym`]
1996#[derive(Debug, Clone, Serialize, Deserialize)]
1997#[serde(untagged)]
1998pub enum GetSearchSynonymError {
1999	Status404(models::ApiResponse),
2000	UnknownValue(serde_json::Value),
2001}
2002
2003/// struct for typed errors of method [`get_search_synonyms`]
2004#[derive(Debug, Clone, Serialize, Deserialize)]
2005#[serde(untagged)]
2006pub enum GetSearchSynonymsError {
2007	Status404(models::ApiResponse),
2008	UnknownValue(serde_json::Value),
2009}
2010
2011/// struct for typed errors of method [`import_documents`]
2012#[derive(Debug, Clone, Serialize, Deserialize)]
2013#[serde(untagged)]
2014pub enum ImportDocumentsError {
2015	Status400(models::ApiResponse),
2016	Status404(models::ApiResponse),
2017	UnknownValue(serde_json::Value),
2018}
2019
2020/// struct for typed errors of method [`index_document`]
2021#[derive(Debug, Clone, Serialize, Deserialize)]
2022#[serde(untagged)]
2023pub enum IndexDocumentError {
2024	Status404(models::ApiResponse),
2025	UnknownValue(serde_json::Value),
2026}
2027
2028/// struct for typed errors of method [`multi_search`]
2029#[derive(Debug, Clone, Serialize, Deserialize)]
2030#[serde(untagged)]
2031pub enum MultiSearchError {
2032	Status400(models::ApiResponse),
2033	UnknownValue(serde_json::Value),
2034}
2035
2036/// struct for typed errors of method [`search_collection`]
2037#[derive(Debug, Clone, Serialize, Deserialize)]
2038#[serde(untagged)]
2039pub enum SearchCollectionError {
2040	Status400(models::ApiResponse),
2041	Status404(models::ApiResponse),
2042	UnknownValue(serde_json::Value),
2043}
2044
2045/// struct for typed errors of method [`update_document`]
2046#[derive(Debug, Clone, Serialize, Deserialize)]
2047#[serde(untagged)]
2048pub enum UpdateDocumentError {
2049	Status404(models::ApiResponse),
2050	UnknownValue(serde_json::Value),
2051}
2052
2053/// struct for typed errors of method [`update_documents`]
2054#[derive(Debug, Clone, Serialize, Deserialize)]
2055#[serde(untagged)]
2056pub enum UpdateDocumentsError {
2057	Status400(models::ApiResponse),
2058	Status404(models::ApiResponse),
2059	UnknownValue(serde_json::Value),
2060}
2061
2062/// struct for typed errors of method [`upsert_search_override`]
2063#[derive(Debug, Clone, Serialize, Deserialize)]
2064#[serde(untagged)]
2065pub enum UpsertSearchOverrideError {
2066	Status404(models::ApiResponse),
2067	UnknownValue(serde_json::Value),
2068}
2069
2070/// struct for typed errors of method [`upsert_search_synonym`]
2071#[derive(Debug, Clone, Serialize, Deserialize)]
2072#[serde(untagged)]
2073pub enum UpsertSearchSynonymError {
2074	Status404(models::ApiResponse),
2075	UnknownValue(serde_json::Value),
2076}