typesense_rs/apis/
analytics_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 AnalyticsApi: Send + Sync {
21	async fn create_analytics_event(
22		&self,
23		params: CreateAnalyticsEventParams,
24	) -> Result<models::AnalyticsEventCreateResponse, Error<CreateAnalyticsEventError>>;
25	async fn create_analytics_rule(
26		&self,
27		params: CreateAnalyticsRuleParams,
28	) -> Result<models::AnalyticsRuleSchema, Error<CreateAnalyticsRuleError>>;
29	async fn delete_analytics_rule(
30		&self,
31		params: DeleteAnalyticsRuleParams,
32	) -> Result<models::AnalyticsRuleDeleteResponse, Error<DeleteAnalyticsRuleError>>;
33	async fn retrieve_analytics_rule(
34		&self,
35		params: RetrieveAnalyticsRuleParams,
36	) -> Result<models::AnalyticsRuleSchema, Error<RetrieveAnalyticsRuleError>>;
37	async fn retrieve_analytics_rules(
38		&self,
39	) -> Result<models::AnalyticsRulesRetrieveSchema, Error<RetrieveAnalyticsRulesError>>;
40	async fn upsert_analytics_rule(
41		&self,
42		params: UpsertAnalyticsRuleParams,
43	) -> Result<models::AnalyticsRuleSchema, Error<UpsertAnalyticsRuleError>>;
44}
45
46pub struct AnalyticsApiClient {
47	configuration: Arc<configuration::Configuration>,
48}
49
50impl AnalyticsApiClient {
51	pub fn new(configuration: Arc<configuration::Configuration>) -> Self {
52		Self { configuration }
53	}
54}
55
56/// struct for passing parameters to the method [`create_analytics_event`]
57#[derive(Clone, Debug)]
58#[cfg_attr(feature = "bon", derive(::bon::Builder))]
59pub struct CreateAnalyticsEventParams {
60	/// The Analytics event to be created
61	pub analytics_event_create_schema: models::AnalyticsEventCreateSchema,
62}
63
64/// struct for passing parameters to the method [`create_analytics_rule`]
65#[derive(Clone, Debug)]
66#[cfg_attr(feature = "bon", derive(::bon::Builder))]
67pub struct CreateAnalyticsRuleParams {
68	/// The Analytics rule to be created
69	pub analytics_rule_schema: models::AnalyticsRuleSchema,
70}
71
72/// struct for passing parameters to the method [`delete_analytics_rule`]
73#[derive(Clone, Debug)]
74#[cfg_attr(feature = "bon", derive(::bon::Builder))]
75pub struct DeleteAnalyticsRuleParams {
76	/// The name of the analytics rule to delete
77	pub rule_name: String,
78}
79
80/// struct for passing parameters to the method [`retrieve_analytics_rule`]
81#[derive(Clone, Debug)]
82#[cfg_attr(feature = "bon", derive(::bon::Builder))]
83pub struct RetrieveAnalyticsRuleParams {
84	/// The name of the analytics rule to retrieve
85	pub rule_name: String,
86}
87
88/// struct for passing parameters to the method [`upsert_analytics_rule`]
89#[derive(Clone, Debug)]
90#[cfg_attr(feature = "bon", derive(::bon::Builder))]
91pub struct UpsertAnalyticsRuleParams {
92	/// The name of the analytics rule to upsert
93	pub rule_name: String,
94	/// The Analytics rule to be upserted
95	pub analytics_rule_upsert_schema: models::AnalyticsRuleUpsertSchema,
96}
97
98#[async_trait]
99impl AnalyticsApi for AnalyticsApiClient {
100	/// Sending events for analytics e.g rank search results based on
101	/// popularity.
102	async fn create_analytics_event(
103		&self,
104		params: CreateAnalyticsEventParams,
105	) -> Result<models::AnalyticsEventCreateResponse, Error<CreateAnalyticsEventError>> {
106		let CreateAnalyticsEventParams {
107			analytics_event_create_schema,
108		} = params;
109
110		let local_var_configuration = &self.configuration;
111
112		let local_var_client = &local_var_configuration.client;
113
114		let local_var_uri_str = format!("{}/analytics/events", local_var_configuration.base_path);
115		let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
116
117		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
118			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
119		}
120		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
121			let local_var_key = local_var_apikey.key.clone();
122			let local_var_value = match local_var_apikey.prefix {
123				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
124				None => local_var_key,
125			};
126			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
127		};
128		local_var_req_builder = local_var_req_builder.json(&analytics_event_create_schema);
129
130		let local_var_req = local_var_req_builder.build()?;
131		let local_var_resp = local_var_client.execute(local_var_req).await?;
132
133		let local_var_status = local_var_resp.status();
134		let local_var_content = local_var_resp.text().await?;
135
136		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
137			serde_json::from_str(&local_var_content).map_err(Error::from)
138		} else {
139			let local_var_entity: Option<CreateAnalyticsEventError> = serde_json::from_str(&local_var_content).ok();
140			let local_var_error = ResponseContent {
141				status: local_var_status,
142				content: local_var_content,
143				entity: local_var_entity,
144			};
145			Err(Error::ResponseError(local_var_error))
146		}
147	}
148
149	/// When an analytics rule is created, we give it a name and describe the
150	/// type, the source collections and the destination collection.
151	async fn create_analytics_rule(
152		&self,
153		params: CreateAnalyticsRuleParams,
154	) -> Result<models::AnalyticsRuleSchema, Error<CreateAnalyticsRuleError>> {
155		let CreateAnalyticsRuleParams { analytics_rule_schema } = params;
156
157		let local_var_configuration = &self.configuration;
158
159		let local_var_client = &local_var_configuration.client;
160
161		let local_var_uri_str = format!("{}/analytics/rules", local_var_configuration.base_path);
162		let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
163
164		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
165			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
166		}
167		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
168			let local_var_key = local_var_apikey.key.clone();
169			let local_var_value = match local_var_apikey.prefix {
170				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
171				None => local_var_key,
172			};
173			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
174		};
175		local_var_req_builder = local_var_req_builder.json(&analytics_rule_schema);
176
177		let local_var_req = local_var_req_builder.build()?;
178		let local_var_resp = local_var_client.execute(local_var_req).await?;
179
180		let local_var_status = local_var_resp.status();
181		let local_var_content = local_var_resp.text().await?;
182
183		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
184			serde_json::from_str(&local_var_content).map_err(Error::from)
185		} else {
186			let local_var_entity: Option<CreateAnalyticsRuleError> = serde_json::from_str(&local_var_content).ok();
187			let local_var_error = ResponseContent {
188				status: local_var_status,
189				content: local_var_content,
190				entity: local_var_entity,
191			};
192			Err(Error::ResponseError(local_var_error))
193		}
194	}
195
196	/// Permanently deletes an analytics rule, given it's name
197	async fn delete_analytics_rule(
198		&self,
199		params: DeleteAnalyticsRuleParams,
200	) -> Result<models::AnalyticsRuleDeleteResponse, Error<DeleteAnalyticsRuleError>> {
201		let DeleteAnalyticsRuleParams { rule_name } = params;
202
203		let local_var_configuration = &self.configuration;
204
205		let local_var_client = &local_var_configuration.client;
206
207		let local_var_uri_str = format!(
208			"{}/analytics/rules/{ruleName}",
209			local_var_configuration.base_path,
210			ruleName = crate::apis::urlencode(rule_name)
211		);
212		let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
213
214		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
215			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
216		}
217		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
218			let local_var_key = local_var_apikey.key.clone();
219			let local_var_value = match local_var_apikey.prefix {
220				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
221				None => local_var_key,
222			};
223			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
224		};
225
226		let local_var_req = local_var_req_builder.build()?;
227		let local_var_resp = local_var_client.execute(local_var_req).await?;
228
229		let local_var_status = local_var_resp.status();
230		let local_var_content = local_var_resp.text().await?;
231
232		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
233			serde_json::from_str(&local_var_content).map_err(Error::from)
234		} else {
235			let local_var_entity: Option<DeleteAnalyticsRuleError> = serde_json::from_str(&local_var_content).ok();
236			let local_var_error = ResponseContent {
237				status: local_var_status,
238				content: local_var_content,
239				entity: local_var_entity,
240			};
241			Err(Error::ResponseError(local_var_error))
242		}
243	}
244
245	/// Retrieve the details of an analytics rule, given it's name
246	async fn retrieve_analytics_rule(
247		&self,
248		params: RetrieveAnalyticsRuleParams,
249	) -> Result<models::AnalyticsRuleSchema, Error<RetrieveAnalyticsRuleError>> {
250		let RetrieveAnalyticsRuleParams { rule_name } = params;
251
252		let local_var_configuration = &self.configuration;
253
254		let local_var_client = &local_var_configuration.client;
255
256		let local_var_uri_str = format!(
257			"{}/analytics/rules/{ruleName}",
258			local_var_configuration.base_path,
259			ruleName = crate::apis::urlencode(rule_name)
260		);
261		let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
262
263		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
264			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
265		}
266		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
267			let local_var_key = local_var_apikey.key.clone();
268			let local_var_value = match local_var_apikey.prefix {
269				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
270				None => local_var_key,
271			};
272			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
273		};
274
275		let local_var_req = local_var_req_builder.build()?;
276		let local_var_resp = local_var_client.execute(local_var_req).await?;
277
278		let local_var_status = local_var_resp.status();
279		let local_var_content = local_var_resp.text().await?;
280
281		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
282			serde_json::from_str(&local_var_content).map_err(Error::from)
283		} else {
284			let local_var_entity: Option<RetrieveAnalyticsRuleError> = serde_json::from_str(&local_var_content).ok();
285			let local_var_error = ResponseContent {
286				status: local_var_status,
287				content: local_var_content,
288				entity: local_var_entity,
289			};
290			Err(Error::ResponseError(local_var_error))
291		}
292	}
293
294	/// Retrieve the details of all analytics rules
295	async fn retrieve_analytics_rules(
296		&self,
297	) -> Result<models::AnalyticsRulesRetrieveSchema, Error<RetrieveAnalyticsRulesError>> {
298		let local_var_configuration = &self.configuration;
299
300		let local_var_client = &local_var_configuration.client;
301
302		let local_var_uri_str = format!("{}/analytics/rules", local_var_configuration.base_path);
303		let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
304
305		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
306			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
307		}
308		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
309			let local_var_key = local_var_apikey.key.clone();
310			let local_var_value = match local_var_apikey.prefix {
311				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
312				None => local_var_key,
313			};
314			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
315		};
316
317		let local_var_req = local_var_req_builder.build()?;
318		let local_var_resp = local_var_client.execute(local_var_req).await?;
319
320		let local_var_status = local_var_resp.status();
321		let local_var_content = local_var_resp.text().await?;
322
323		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
324			serde_json::from_str(&local_var_content).map_err(Error::from)
325		} else {
326			let local_var_entity: Option<RetrieveAnalyticsRulesError> = serde_json::from_str(&local_var_content).ok();
327			let local_var_error = ResponseContent {
328				status: local_var_status,
329				content: local_var_content,
330				entity: local_var_entity,
331			};
332			Err(Error::ResponseError(local_var_error))
333		}
334	}
335
336	/// Upserts an analytics rule with the given name.
337	async fn upsert_analytics_rule(
338		&self,
339		params: UpsertAnalyticsRuleParams,
340	) -> Result<models::AnalyticsRuleSchema, Error<UpsertAnalyticsRuleError>> {
341		let UpsertAnalyticsRuleParams {
342			rule_name,
343			analytics_rule_upsert_schema,
344		} = params;
345
346		let local_var_configuration = &self.configuration;
347
348		let local_var_client = &local_var_configuration.client;
349
350		let local_var_uri_str = format!(
351			"{}/analytics/rules/{ruleName}",
352			local_var_configuration.base_path,
353			ruleName = crate::apis::urlencode(rule_name)
354		);
355		let mut local_var_req_builder = local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
356
357		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
358			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
359		}
360		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
361			let local_var_key = local_var_apikey.key.clone();
362			let local_var_value = match local_var_apikey.prefix {
363				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
364				None => local_var_key,
365			};
366			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
367		};
368		local_var_req_builder = local_var_req_builder.json(&analytics_rule_upsert_schema);
369
370		let local_var_req = local_var_req_builder.build()?;
371		let local_var_resp = local_var_client.execute(local_var_req).await?;
372
373		let local_var_status = local_var_resp.status();
374		let local_var_content = local_var_resp.text().await?;
375
376		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
377			serde_json::from_str(&local_var_content).map_err(Error::from)
378		} else {
379			let local_var_entity: Option<UpsertAnalyticsRuleError> = serde_json::from_str(&local_var_content).ok();
380			let local_var_error = ResponseContent {
381				status: local_var_status,
382				content: local_var_content,
383				entity: local_var_entity,
384			};
385			Err(Error::ResponseError(local_var_error))
386		}
387	}
388}
389
390/// struct for typed errors of method [`create_analytics_event`]
391#[derive(Debug, Clone, Serialize, Deserialize)]
392#[serde(untagged)]
393pub enum CreateAnalyticsEventError {
394	Status400(models::ApiResponse),
395	UnknownValue(serde_json::Value),
396}
397
398/// struct for typed errors of method [`create_analytics_rule`]
399#[derive(Debug, Clone, Serialize, Deserialize)]
400#[serde(untagged)]
401pub enum CreateAnalyticsRuleError {
402	Status400(models::ApiResponse),
403	UnknownValue(serde_json::Value),
404}
405
406/// struct for typed errors of method [`delete_analytics_rule`]
407#[derive(Debug, Clone, Serialize, Deserialize)]
408#[serde(untagged)]
409pub enum DeleteAnalyticsRuleError {
410	Status404(models::ApiResponse),
411	UnknownValue(serde_json::Value),
412}
413
414/// struct for typed errors of method [`retrieve_analytics_rule`]
415#[derive(Debug, Clone, Serialize, Deserialize)]
416#[serde(untagged)]
417pub enum RetrieveAnalyticsRuleError {
418	Status404(models::ApiResponse),
419	UnknownValue(serde_json::Value),
420}
421
422/// struct for typed errors of method [`retrieve_analytics_rules`]
423#[derive(Debug, Clone, Serialize, Deserialize)]
424#[serde(untagged)]
425pub enum RetrieveAnalyticsRulesError {
426	UnknownValue(serde_json::Value),
427}
428
429/// struct for typed errors of method [`upsert_analytics_rule`]
430#[derive(Debug, Clone, Serialize, Deserialize)]
431#[serde(untagged)]
432pub enum UpsertAnalyticsRuleError {
433	Status400(models::ApiResponse),
434	UnknownValue(serde_json::Value),
435}