typesense_rs/apis/
keys_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 KeysApi: Send + Sync {
21	async fn create_key(&self, params: CreateKeyParams) -> Result<models::ApiKey, Error<CreateKeyError>>;
22	async fn delete_key(&self, params: DeleteKeyParams) -> Result<models::ApiKey, Error<DeleteKeyError>>;
23	async fn get_key(&self, params: GetKeyParams) -> Result<models::ApiKey, Error<GetKeyError>>;
24	async fn get_keys(&self) -> Result<models::ApiKeysResponse, Error<GetKeysError>>;
25}
26
27pub struct KeysApiClient {
28	configuration: Arc<configuration::Configuration>,
29}
30
31impl KeysApiClient {
32	pub fn new(configuration: Arc<configuration::Configuration>) -> Self {
33		Self { configuration }
34	}
35}
36
37/// struct for passing parameters to the method [`create_key`]
38#[derive(Clone, Debug)]
39#[cfg_attr(feature = "bon", derive(::bon::Builder))]
40pub struct CreateKeyParams {
41	/// The object that describes API key scope
42	pub api_key_schema: Option<models::ApiKeySchema>,
43}
44
45/// struct for passing parameters to the method [`delete_key`]
46#[derive(Clone, Debug)]
47#[cfg_attr(feature = "bon", derive(::bon::Builder))]
48pub struct DeleteKeyParams {
49	/// The ID of the key to delete
50	pub key_id: i64,
51}
52
53/// struct for passing parameters to the method [`get_key`]
54#[derive(Clone, Debug)]
55#[cfg_attr(feature = "bon", derive(::bon::Builder))]
56pub struct GetKeyParams {
57	/// The ID of the key to retrieve
58	pub key_id: i64,
59}
60
61#[async_trait]
62impl KeysApi for KeysApiClient {
63	/// Create an API Key with fine-grain access control. You can restrict
64	/// access on both a per-collection and per-action level. The generated key
65	/// is returned only during creation. You want to store this key carefully
66	/// in a secure place.
67	async fn create_key(&self, params: CreateKeyParams) -> Result<models::ApiKey, Error<CreateKeyError>> {
68		let CreateKeyParams { api_key_schema } = params;
69
70		let local_var_configuration = &self.configuration;
71
72		let local_var_client = &local_var_configuration.client;
73
74		let local_var_uri_str = format!("{}/keys", local_var_configuration.base_path);
75		let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
76
77		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
78			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
79		}
80		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
81			let local_var_key = local_var_apikey.key.clone();
82			let local_var_value = match local_var_apikey.prefix {
83				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
84				None => local_var_key,
85			};
86			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
87		};
88		local_var_req_builder = local_var_req_builder.json(&api_key_schema);
89
90		let local_var_req = local_var_req_builder.build()?;
91		let local_var_resp = local_var_client.execute(local_var_req).await?;
92
93		let local_var_status = local_var_resp.status();
94		let local_var_content = local_var_resp.text().await?;
95
96		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
97			serde_json::from_str(&local_var_content).map_err(Error::from)
98		} else {
99			let local_var_entity: Option<CreateKeyError> = serde_json::from_str(&local_var_content).ok();
100			let local_var_error = ResponseContent {
101				status: local_var_status,
102				content: local_var_content,
103				entity: local_var_entity,
104			};
105			Err(Error::ResponseError(local_var_error))
106		}
107	}
108
109	async fn delete_key(&self, params: DeleteKeyParams) -> Result<models::ApiKey, Error<DeleteKeyError>> {
110		let DeleteKeyParams { key_id } = params;
111
112		let local_var_configuration = &self.configuration;
113
114		let local_var_client = &local_var_configuration.client;
115
116		let local_var_uri_str = format!("{}/keys/{keyId}", local_var_configuration.base_path, keyId = key_id);
117		let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
118
119		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
120			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
121		}
122		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
123			let local_var_key = local_var_apikey.key.clone();
124			let local_var_value = match local_var_apikey.prefix {
125				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
126				None => local_var_key,
127			};
128			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
129		};
130
131		let local_var_req = local_var_req_builder.build()?;
132		let local_var_resp = local_var_client.execute(local_var_req).await?;
133
134		let local_var_status = local_var_resp.status();
135		let local_var_content = local_var_resp.text().await?;
136
137		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
138			serde_json::from_str(&local_var_content).map_err(Error::from)
139		} else {
140			let local_var_entity: Option<DeleteKeyError> = serde_json::from_str(&local_var_content).ok();
141			let local_var_error = ResponseContent {
142				status: local_var_status,
143				content: local_var_content,
144				entity: local_var_entity,
145			};
146			Err(Error::ResponseError(local_var_error))
147		}
148	}
149
150	/// Retrieve (metadata about) a key. Only the key prefix is returned when
151	/// you retrieve a key. Due to security reasons, only the create endpoint
152	/// returns the full API key.
153	async fn get_key(&self, params: GetKeyParams) -> Result<models::ApiKey, Error<GetKeyError>> {
154		let GetKeyParams { key_id } = params;
155
156		let local_var_configuration = &self.configuration;
157
158		let local_var_client = &local_var_configuration.client;
159
160		let local_var_uri_str = format!("{}/keys/{keyId}", local_var_configuration.base_path, keyId = key_id);
161		let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
162
163		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
164			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
165		}
166		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
167			let local_var_key = local_var_apikey.key.clone();
168			let local_var_value = match local_var_apikey.prefix {
169				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
170				None => local_var_key,
171			};
172			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
173		};
174
175		let local_var_req = local_var_req_builder.build()?;
176		let local_var_resp = local_var_client.execute(local_var_req).await?;
177
178		let local_var_status = local_var_resp.status();
179		let local_var_content = local_var_resp.text().await?;
180
181		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
182			serde_json::from_str(&local_var_content).map_err(Error::from)
183		} else {
184			let local_var_entity: Option<GetKeyError> = serde_json::from_str(&local_var_content).ok();
185			let local_var_error = ResponseContent {
186				status: local_var_status,
187				content: local_var_content,
188				entity: local_var_entity,
189			};
190			Err(Error::ResponseError(local_var_error))
191		}
192	}
193
194	async fn get_keys(&self) -> Result<models::ApiKeysResponse, Error<GetKeysError>> {
195		let local_var_configuration = &self.configuration;
196
197		let local_var_client = &local_var_configuration.client;
198
199		let local_var_uri_str = format!("{}/keys", local_var_configuration.base_path);
200		let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
201
202		if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
203			local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
204		}
205		if let Some(ref local_var_apikey) = local_var_configuration.api_key {
206			let local_var_key = local_var_apikey.key.clone();
207			let local_var_value = match local_var_apikey.prefix {
208				Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
209				None => local_var_key,
210			};
211			local_var_req_builder = local_var_req_builder.header("X-TYPESENSE-API-KEY", local_var_value);
212		};
213
214		let local_var_req = local_var_req_builder.build()?;
215		let local_var_resp = local_var_client.execute(local_var_req).await?;
216
217		let local_var_status = local_var_resp.status();
218		let local_var_content = local_var_resp.text().await?;
219
220		if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
221			serde_json::from_str(&local_var_content).map_err(Error::from)
222		} else {
223			let local_var_entity: Option<GetKeysError> = serde_json::from_str(&local_var_content).ok();
224			let local_var_error = ResponseContent {
225				status: local_var_status,
226				content: local_var_content,
227				entity: local_var_entity,
228			};
229			Err(Error::ResponseError(local_var_error))
230		}
231	}
232}
233
234/// struct for typed errors of method [`create_key`]
235#[derive(Debug, Clone, Serialize, Deserialize)]
236#[serde(untagged)]
237pub enum CreateKeyError {
238	Status400(models::ApiResponse),
239	Status409(models::ApiResponse),
240	UnknownValue(serde_json::Value),
241}
242
243/// struct for typed errors of method [`delete_key`]
244#[derive(Debug, Clone, Serialize, Deserialize)]
245#[serde(untagged)]
246pub enum DeleteKeyError {
247	Status400(models::ApiResponse),
248	Status404(models::ApiResponse),
249	UnknownValue(serde_json::Value),
250}
251
252/// struct for typed errors of method [`get_key`]
253#[derive(Debug, Clone, Serialize, Deserialize)]
254#[serde(untagged)]
255pub enum GetKeyError {
256	Status404(models::ApiResponse),
257	UnknownValue(serde_json::Value),
258}
259
260/// struct for typed errors of method [`get_keys`]
261#[derive(Debug, Clone, Serialize, Deserialize)]
262#[serde(untagged)]
263pub enum GetKeysError {
264	UnknownValue(serde_json::Value),
265}