Skip to main content

hanzo_client/apis/
kv_api.rs

1/*
2 * Hanzo Cloud API
3 *
4 * The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
5 *
6 * The version of the OpenAPI document: v1
7 * 
8 * Generated by: https://openapi-generator.tech
9 */
10
11
12use reqwest;
13use serde::{Deserialize, Serialize, de::Error as _};
14use crate::{apis::ResponseContent, models};
15use super::{Error, configuration, ContentType};
16
17
18/// struct for typed errors of method [`delete_kv_by_bucket`]
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum DeleteKvByBucketError {
22    UnknownValue(serde_json::Value),
23}
24
25/// struct for typed errors of method [`delete_kv_by_bucket_by_key`]
26#[derive(Debug, Clone, Serialize, Deserialize)]
27#[serde(untagged)]
28pub enum DeleteKvByBucketByKeyError {
29    UnknownValue(serde_json::Value),
30}
31
32/// struct for typed errors of method [`get_kv_by_bucket_by_key`]
33#[derive(Debug, Clone, Serialize, Deserialize)]
34#[serde(untagged)]
35pub enum GetKvByBucketByKeyError {
36    UnknownValue(serde_json::Value),
37}
38
39/// struct for typed errors of method [`get_kv_by_bucket_by_key_history`]
40#[derive(Debug, Clone, Serialize, Deserialize)]
41#[serde(untagged)]
42pub enum GetKvByBucketByKeyHistoryError {
43    UnknownValue(serde_json::Value),
44}
45
46/// struct for typed errors of method [`post_kv_by_bucket`]
47#[derive(Debug, Clone, Serialize, Deserialize)]
48#[serde(untagged)]
49pub enum PostKvByBucketError {
50    UnknownValue(serde_json::Value),
51}
52
53/// struct for typed errors of method [`put_kv_by_bucket_by_key`]
54#[derive(Debug, Clone, Serialize, Deserialize)]
55#[serde(untagged)]
56pub enum PutKvByBucketByKeyError {
57    UnknownValue(serde_json::Value),
58}
59
60
61/// Removes one bucket of the caller's org — every key and every revision with it — and answers 204 with no body. 404 when the org has no bucket of that name.
62pub async fn delete_kv_by_bucket(configuration: &configuration::Configuration, bucket: &str) -> Result<(), Error<DeleteKvByBucketError>> {
63    // add a prefix to parameters to efficiently prevent name collisions
64    let p_bucket = bucket;
65
66    let uri_str = format!("{}/v1/kv/{bucket}", configuration.base_path, bucket=crate::apis::urlencode(p_bucket));
67    let mut req_builder = configuration.client.request(reqwest::Method::DELETE, &uri_str);
68
69    if let Some(ref user_agent) = configuration.user_agent {
70        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
71    }
72    if let Some(ref token) = configuration.bearer_access_token {
73        req_builder = req_builder.bearer_auth(token.to_owned());
74    };
75
76    let req = req_builder.build()?;
77    let resp = configuration.client.execute(req).await?;
78
79    let status = resp.status();
80
81    if !status.is_client_error() && !status.is_server_error() {
82        Ok(())
83    } else {
84        let content = resp.text().await?;
85        let entity: Option<DeleteKvByBucketError> = serde_json::from_str(&content).ok();
86        Err(Error::ResponseError(ResponseContent { status, content, entity }))
87    }
88}
89
90/// Delete removes one key — a delete marker in the key's history, so watchers see it and Get answers 404 — and answers 204 with no body. 404 when the bucket does not exist.
91pub async fn delete_kv_by_bucket_by_key(configuration: &configuration::Configuration, bucket: &str, key: &str) -> Result<(), Error<DeleteKvByBucketByKeyError>> {
92    // add a prefix to parameters to efficiently prevent name collisions
93    let p_bucket = bucket;
94    let p_key = key;
95
96    let uri_str = format!("{}/v1/kv/{bucket}/{key}", configuration.base_path, bucket=crate::apis::urlencode(p_bucket), key=crate::apis::urlencode(p_key));
97    let mut req_builder = configuration.client.request(reqwest::Method::DELETE, &uri_str);
98
99    if let Some(ref user_agent) = configuration.user_agent {
100        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
101    }
102    if let Some(ref token) = configuration.bearer_access_token {
103        req_builder = req_builder.bearer_auth(token.to_owned());
104    };
105
106    let req = req_builder.build()?;
107    let resp = configuration.client.execute(req).await?;
108
109    let status = resp.status();
110
111    if !status.is_client_error() && !status.is_server_error() {
112        Ok(())
113    } else {
114        let content = resp.text().await?;
115        let entity: Option<DeleteKvByBucketByKeyError> = serde_json::from_str(&content).ok();
116        Err(Error::ResponseError(ResponseContent { status, content, entity }))
117    }
118}
119
120/// Get returns one key's current value and revision. 404 when the bucket does not exist, the key was never written, or its latest revision is a delete.
121pub async fn get_kv_by_bucket_by_key(configuration: &configuration::Configuration, bucket: &str, key: &str) -> Result<models::KvEntry, Error<GetKvByBucketByKeyError>> {
122    // add a prefix to parameters to efficiently prevent name collisions
123    let p_bucket = bucket;
124    let p_key = key;
125
126    let uri_str = format!("{}/v1/kv/{bucket}/{key}", configuration.base_path, bucket=crate::apis::urlencode(p_bucket), key=crate::apis::urlencode(p_key));
127    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
128
129    if let Some(ref user_agent) = configuration.user_agent {
130        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
131    }
132    if let Some(ref token) = configuration.bearer_access_token {
133        req_builder = req_builder.bearer_auth(token.to_owned());
134    };
135
136    let req = req_builder.build()?;
137    let resp = configuration.client.execute(req).await?;
138
139    let status = resp.status();
140    let content_type = resp
141        .headers()
142        .get("content-type")
143        .and_then(|v| v.to_str().ok())
144        .unwrap_or("application/octet-stream");
145    let content_type = super::ContentType::from(content_type);
146
147    if !status.is_client_error() && !status.is_server_error() {
148        let content = resp.text().await?;
149        match content_type {
150            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
151            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::KvEntry`"))),
152            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::KvEntry`")))),
153        }
154    } else {
155        let content = resp.text().await?;
156        let entity: Option<GetKvByBucketByKeyError> = serde_json::from_str(&content).ok();
157        Err(Error::ResponseError(ResponseContent { status, content, entity }))
158    }
159}
160
161/// History returns one key's retained revisions, oldest first — every put and every delete marker up to the bucket's History depth. 404 when the bucket does not exist or the key was never written.
162pub async fn get_kv_by_bucket_by_key_history(configuration: &configuration::Configuration, bucket: &str, key: &str) -> Result<models::KvPage, Error<GetKvByBucketByKeyHistoryError>> {
163    // add a prefix to parameters to efficiently prevent name collisions
164    let p_bucket = bucket;
165    let p_key = key;
166
167    let uri_str = format!("{}/v1/kv/{bucket}/{key}/history", configuration.base_path, bucket=crate::apis::urlencode(p_bucket), key=crate::apis::urlencode(p_key));
168    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
169
170    if let Some(ref user_agent) = configuration.user_agent {
171        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
172    }
173    if let Some(ref token) = configuration.bearer_access_token {
174        req_builder = req_builder.bearer_auth(token.to_owned());
175    };
176
177    let req = req_builder.build()?;
178    let resp = configuration.client.execute(req).await?;
179
180    let status = resp.status();
181    let content_type = resp
182        .headers()
183        .get("content-type")
184        .and_then(|v| v.to_str().ok())
185        .unwrap_or("application/octet-stream");
186    let content_type = super::ContentType::from(content_type);
187
188    if !status.is_client_error() && !status.is_server_error() {
189        let content = resp.text().await?;
190        match content_type {
191            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
192            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::KvPage`"))),
193            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::KvPage`")))),
194        }
195    } else {
196        let content = resp.text().await?;
197        let entity: Option<GetKvByBucketByKeyHistoryError> = serde_json::from_str(&content).ok();
198        Err(Error::ResponseError(ResponseContent { status, content, entity }))
199    }
200}
201
202/// Creates a KV bucket and returns it. A bucket is keyed state on the same durable plane as the streams: each key holds up to History revisions, entries can expire by TTL, and watchers on the NATS port see every write. 409 when the org already has a bucket of that name.
203pub async fn post_kv_by_bucket(configuration: &configuration::Configuration, bucket: &str, bucket_write: models::BucketWrite) -> Result<models::BucketRecord, Error<PostKvByBucketError>> {
204    // add a prefix to parameters to efficiently prevent name collisions
205    let p_bucket = bucket;
206    let p_bucket_write = bucket_write;
207
208    let uri_str = format!("{}/v1/kv/{bucket}", configuration.base_path, bucket=crate::apis::urlencode(p_bucket));
209    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
210
211    if let Some(ref user_agent) = configuration.user_agent {
212        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
213    }
214    if let Some(ref token) = configuration.bearer_access_token {
215        req_builder = req_builder.bearer_auth(token.to_owned());
216    };
217    req_builder = req_builder.json(&p_bucket_write);
218
219    let req = req_builder.build()?;
220    let resp = configuration.client.execute(req).await?;
221
222    let status = resp.status();
223    let content_type = resp
224        .headers()
225        .get("content-type")
226        .and_then(|v| v.to_str().ok())
227        .unwrap_or("application/octet-stream");
228    let content_type = super::ContentType::from(content_type);
229
230    if !status.is_client_error() && !status.is_server_error() {
231        let content = resp.text().await?;
232        match content_type {
233            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
234            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::BucketRecord`"))),
235            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::BucketRecord`")))),
236        }
237    } else {
238        let content = resp.text().await?;
239        let entity: Option<PostKvByBucketError> = serde_json::from_str(&content).ok();
240        Err(Error::ResponseError(ResponseContent { status, content, entity }))
241    }
242}
243
244/// Put sets one key to one value and returns the revision the write created. Writes are versioned: each put is a new revision and the bucket retains up to its History of them per key.
245pub async fn put_kv_by_bucket_by_key(configuration: &configuration::Configuration, bucket: &str, key: &str, kv_write: models::KvWrite) -> Result<models::KvAck, Error<PutKvByBucketByKeyError>> {
246    // add a prefix to parameters to efficiently prevent name collisions
247    let p_bucket = bucket;
248    let p_key = key;
249    let p_kv_write = kv_write;
250
251    let uri_str = format!("{}/v1/kv/{bucket}/{key}", configuration.base_path, bucket=crate::apis::urlencode(p_bucket), key=crate::apis::urlencode(p_key));
252    let mut req_builder = configuration.client.request(reqwest::Method::PUT, &uri_str);
253
254    if let Some(ref user_agent) = configuration.user_agent {
255        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
256    }
257    if let Some(ref token) = configuration.bearer_access_token {
258        req_builder = req_builder.bearer_auth(token.to_owned());
259    };
260    req_builder = req_builder.json(&p_kv_write);
261
262    let req = req_builder.build()?;
263    let resp = configuration.client.execute(req).await?;
264
265    let status = resp.status();
266    let content_type = resp
267        .headers()
268        .get("content-type")
269        .and_then(|v| v.to_str().ok())
270        .unwrap_or("application/octet-stream");
271    let content_type = super::ContentType::from(content_type);
272
273    if !status.is_client_error() && !status.is_server_error() {
274        let content = resp.text().await?;
275        match content_type {
276            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
277            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::KvAck`"))),
278            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::KvAck`")))),
279        }
280    } else {
281        let content = resp.text().await?;
282        let entity: Option<PutKvByBucketByKeyError> = serde_json::from_str(&content).ok();
283        Err(Error::ResponseError(ResponseContent { status, content, entity }))
284    }
285}
286