Skip to main content

gestalt/
cache.rs

1// Code generated by sdkgen. DO NOT EDIT.
2
3//! Generated native types and clients for cache.proto.
4
5use crate::codec::cache::{
6    from_wire_cache_delete_many_response, from_wire_cache_delete_response,
7    from_wire_cache_get_many_response, from_wire_cache_get_response,
8    from_wire_cache_touch_response, to_wire_cache_delete_many_request,
9    to_wire_cache_delete_request, to_wire_cache_get_many_request, to_wire_cache_get_request,
10    to_wire_cache_set_many_request, to_wire_cache_set_request, to_wire_cache_touch_request,
11};
12use crate::codec::host_service::{HostServiceChannel, connect_host_service, plain_channel};
13use crate::generated::v1;
14use crate::rpc_support::GestaltError;
15
16/// CacheDeleteManyRequest removes multiple cache keys in one RPC.
17///
18/// Native message type for `gestalt.provider.v1.CacheDeleteManyRequest`.
19#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
20#[serde(rename_all = "camelCase")]
21pub struct CacheDeleteManyRequest {
22    /// The `keys` field.
23    pub keys: Vec<String>,
24}
25
26/// CacheDeleteManyResponse reports how many keys were deleted.
27///
28/// Native message type for `gestalt.provider.v1.CacheDeleteManyResponse`.
29#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
30#[serde(rename_all = "camelCase")]
31pub struct CacheDeleteManyResponse {
32    /// The `deleted` field.
33    pub deleted: i64,
34}
35
36/// CacheDeleteRequest removes one cache key.
37///
38/// Native message type for `gestalt.provider.v1.CacheDeleteRequest`.
39#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
40#[serde(rename_all = "camelCase")]
41pub struct CacheDeleteRequest {
42    /// The `key` field.
43    pub key: String,
44}
45
46/// CacheDeleteResponse reports whether one key existed and was deleted.
47///
48/// Native message type for `gestalt.provider.v1.CacheDeleteResponse`.
49#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
50#[serde(rename_all = "camelCase")]
51pub struct CacheDeleteResponse {
52    /// The `deleted` field.
53    pub deleted: bool,
54}
55
56/// CacheGetManyRequest loads multiple cache keys in one RPC.
57///
58/// Native message type for `gestalt.provider.v1.CacheGetManyRequest`.
59#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
60#[serde(rename_all = "camelCase")]
61pub struct CacheGetManyRequest {
62    /// The `keys` field.
63    pub keys: Vec<String>,
64}
65
66/// CacheGetManyResponse returns every lookup result for GetMany.
67///
68/// Native message type for `gestalt.provider.v1.CacheGetManyResponse`.
69#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
70#[serde(rename_all = "camelCase")]
71pub struct CacheGetManyResponse {
72    /// The `entries` field.
73    pub entries: Vec<CacheResult>,
74}
75
76/// CacheGetRequest loads one cache key.
77///
78/// Native message type for `gestalt.provider.v1.CacheGetRequest`.
79#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
80#[serde(rename_all = "camelCase")]
81pub struct CacheGetRequest {
82    /// The `key` field.
83    pub key: String,
84}
85
86/// CacheGetResponse is the result of looking up one cache key.
87///
88/// Native message type for `gestalt.provider.v1.CacheGetResponse`.
89#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
90#[serde(rename_all = "camelCase")]
91pub struct CacheGetResponse {
92    /// The `found` field.
93    pub found: bool,
94    /// The `value` field.
95    pub value: Vec<u8>,
96}
97
98/// CacheResult is one lookup result returned by GetMany.
99///
100/// Native message type for `gestalt.provider.v1.CacheResult`.
101#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
102#[serde(rename_all = "camelCase")]
103pub struct CacheResult {
104    /// The `key` field.
105    pub key: String,
106    /// The `found` field.
107    pub found: bool,
108    /// The `value` field.
109    pub value: Vec<u8>,
110}
111
112/// CacheSetEntry is one key/value pair written by SetMany.
113///
114/// Native message type for `gestalt.provider.v1.CacheSetEntry`.
115#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
116#[serde(rename_all = "camelCase")]
117pub struct CacheSetEntry {
118    /// The `key` field.
119    pub key: String,
120    /// The `value` field.
121    pub value: Vec<u8>,
122}
123
124/// CacheSetManyRequest writes multiple cache keys in one RPC.
125///
126/// Native message type for `gestalt.provider.v1.CacheSetManyRequest`.
127#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
128#[serde(rename_all = "camelCase")]
129pub struct CacheSetManyRequest {
130    /// The `entries` field.
131    pub entries: Vec<CacheSetEntry>,
132    #[serde(with = "crate::serde_duration")]
133    /// The `ttl` field; None when unset.
134    pub ttl: Option<std::time::Duration>,
135}
136
137/// CacheSetRequest writes one cache key.
138///
139/// Native message type for `gestalt.provider.v1.CacheSetRequest`.
140#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
141#[serde(rename_all = "camelCase")]
142pub struct CacheSetRequest {
143    /// The `key` field.
144    pub key: String,
145    /// The `value` field.
146    pub value: Vec<u8>,
147    /// ttl applies an optional expiration to the entry.
148    ///
149    #[serde(with = "crate::serde_duration")]
150    /// The `ttl` field; None when unset.
151    pub ttl: Option<std::time::Duration>,
152}
153
154/// CacheTouchRequest extends the TTL for one cache key.
155///
156/// Native message type for `gestalt.provider.v1.CacheTouchRequest`.
157#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
158#[serde(rename_all = "camelCase")]
159pub struct CacheTouchRequest {
160    /// The `key` field.
161    pub key: String,
162    #[serde(with = "crate::serde_duration")]
163    /// The `ttl` field; None when unset.
164    pub ttl: Option<std::time::Duration>,
165}
166
167/// CacheTouchResponse reports whether a key existed and had its TTL updated.
168///
169/// Native message type for `gestalt.provider.v1.CacheTouchResponse`.
170#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
171#[serde(rename_all = "camelCase")]
172pub struct CacheTouchResponse {
173    /// The `touched` field.
174    pub touched: bool,
175}
176
177/// Cache models the shared Gestalt cache-provider protocol.
178///
179/// Client for the `gestalt.provider.v1.Cache` service.
180pub struct Cache {
181    inner: v1::cache_client::CacheClient<HostServiceChannel>,
182    timeout: Option<std::time::Duration>,
183}
184
185impl Cache {
186    /// Creates a client over an established channel.
187    pub fn new(channel: tonic::transport::Channel) -> Self {
188        Self {
189            inner: v1::cache_client::CacheClient::new(plain_channel(channel)),
190            timeout: None,
191        }
192    }
193
194    /// Sets a deadline applied to every unary call; calls that run past it
195    /// fail with DEADLINE_EXCEEDED. Streaming calls are unaffected.
196    pub fn with_timeout(mut self, timeout: std::time::Duration) -> Self {
197        self.timeout = Some(timeout);
198        self
199    }
200
201    /// Connects to the `cache` host service described by the environment.
202    pub async fn connect() -> Result<Self, GestaltError> {
203        Self::connect_named("").await
204    }
205
206    /// Connects to the named `cache` host-service binding.
207    pub async fn connect_named(name: &str) -> Result<Self, GestaltError> {
208        Ok(Self {
209            inner: v1::cache_client::CacheClient::new(connect_host_service("cache", name).await?),
210            timeout: None,
211        })
212    }
213
214    /// Calls `gestalt.provider.v1.Cache.Get`.
215    pub async fn get(&mut self, key: String) -> Result<Option<Vec<u8>>, GestaltError> {
216        let request = CacheGetRequest { key };
217        let mut tonic_request = tonic::Request::new(to_wire_cache_get_request(request));
218        if let Some(timeout) = self.timeout {
219            tonic_request.set_timeout(timeout);
220        }
221        let response =
222            from_wire_cache_get_response(self.inner.get(tonic_request).await?.into_inner());
223        if !response.found {
224            return Ok(None);
225        }
226        Ok(Some(response.value))
227    }
228
229    /// Calls `gestalt.provider.v1.Cache.Get` with the full request and response messages.
230    pub async fn get_raw(
231        &mut self,
232        request: CacheGetRequest,
233    ) -> Result<CacheGetResponse, GestaltError> {
234        let mut tonic_request = tonic::Request::new(to_wire_cache_get_request(request));
235        if let Some(timeout) = self.timeout {
236            tonic_request.set_timeout(timeout);
237        }
238        let response = self.inner.get(tonic_request).await?;
239        Ok(from_wire_cache_get_response(response.into_inner()))
240    }
241
242    /// Calls `gestalt.provider.v1.Cache.GetMany`.
243    pub async fn get_many(
244        &mut self,
245        keys: Vec<String>,
246    ) -> Result<std::collections::BTreeMap<String, Vec<u8>>, GestaltError> {
247        let request = CacheGetManyRequest { keys };
248        let mut tonic_request = tonic::Request::new(to_wire_cache_get_many_request(request));
249        if let Some(timeout) = self.timeout {
250            tonic_request.set_timeout(timeout);
251        }
252        let response = from_wire_cache_get_many_response(
253            self.inner.get_many(tonic_request).await?.into_inner(),
254        );
255        let mut out = std::collections::BTreeMap::new();
256        for entry in response.entries {
257            if entry.found {
258                out.insert(entry.key, entry.value);
259            }
260        }
261        Ok(out)
262    }
263
264    /// Calls `gestalt.provider.v1.Cache.GetMany` with the full request and response messages.
265    pub async fn get_many_raw(
266        &mut self,
267        request: CacheGetManyRequest,
268    ) -> Result<CacheGetManyResponse, GestaltError> {
269        let mut tonic_request = tonic::Request::new(to_wire_cache_get_many_request(request));
270        if let Some(timeout) = self.timeout {
271            tonic_request.set_timeout(timeout);
272        }
273        let response = self.inner.get_many(tonic_request).await?;
274        Ok(from_wire_cache_get_many_response(response.into_inner()))
275    }
276
277    /// Calls `gestalt.provider.v1.Cache.Set`.
278    pub async fn set(
279        &mut self,
280        key: String,
281        value: Vec<u8>,
282        ttl: Option<std::time::Duration>,
283    ) -> Result<(), GestaltError> {
284        let request = CacheSetRequest { key, value, ttl };
285        let mut tonic_request = tonic::Request::new(to_wire_cache_set_request(request));
286        if let Some(timeout) = self.timeout {
287            tonic_request.set_timeout(timeout);
288        }
289        self.inner.set(tonic_request).await?;
290        Ok(())
291    }
292
293    /// Calls `gestalt.provider.v1.Cache.Set` with the full request and response messages.
294    pub async fn set_raw(&mut self, request: CacheSetRequest) -> Result<(), GestaltError> {
295        let mut tonic_request = tonic::Request::new(to_wire_cache_set_request(request));
296        if let Some(timeout) = self.timeout {
297            tonic_request.set_timeout(timeout);
298        }
299        self.inner.set(tonic_request).await?;
300        Ok(())
301    }
302
303    /// Calls `gestalt.provider.v1.Cache.SetMany`.
304    pub async fn set_many(
305        &mut self,
306        entries: Vec<CacheSetEntry>,
307        ttl: Option<std::time::Duration>,
308    ) -> Result<(), GestaltError> {
309        let request = CacheSetManyRequest { entries, ttl };
310        let mut tonic_request = tonic::Request::new(to_wire_cache_set_many_request(request));
311        if let Some(timeout) = self.timeout {
312            tonic_request.set_timeout(timeout);
313        }
314        self.inner.set_many(tonic_request).await?;
315        Ok(())
316    }
317
318    /// Calls `gestalt.provider.v1.Cache.SetMany` with the full request and response messages.
319    pub async fn set_many_raw(&mut self, request: CacheSetManyRequest) -> Result<(), GestaltError> {
320        let mut tonic_request = tonic::Request::new(to_wire_cache_set_many_request(request));
321        if let Some(timeout) = self.timeout {
322            tonic_request.set_timeout(timeout);
323        }
324        self.inner.set_many(tonic_request).await?;
325        Ok(())
326    }
327
328    /// Calls `gestalt.provider.v1.Cache.Delete`.
329    pub async fn delete(&mut self, key: String) -> Result<bool, GestaltError> {
330        let request = CacheDeleteRequest { key };
331        let mut tonic_request = tonic::Request::new(to_wire_cache_delete_request(request));
332        if let Some(timeout) = self.timeout {
333            tonic_request.set_timeout(timeout);
334        }
335        let response =
336            from_wire_cache_delete_response(self.inner.delete(tonic_request).await?.into_inner());
337        Ok(response.deleted)
338    }
339
340    /// Calls `gestalt.provider.v1.Cache.Delete` with the full request and response messages.
341    pub async fn delete_raw(
342        &mut self,
343        request: CacheDeleteRequest,
344    ) -> Result<CacheDeleteResponse, GestaltError> {
345        let mut tonic_request = tonic::Request::new(to_wire_cache_delete_request(request));
346        if let Some(timeout) = self.timeout {
347            tonic_request.set_timeout(timeout);
348        }
349        let response = self.inner.delete(tonic_request).await?;
350        Ok(from_wire_cache_delete_response(response.into_inner()))
351    }
352
353    /// Calls `gestalt.provider.v1.Cache.DeleteMany`.
354    pub async fn delete_many(&mut self, keys: Vec<String>) -> Result<i64, GestaltError> {
355        let request = CacheDeleteManyRequest { keys };
356        let mut tonic_request = tonic::Request::new(to_wire_cache_delete_many_request(request));
357        if let Some(timeout) = self.timeout {
358            tonic_request.set_timeout(timeout);
359        }
360        let response = from_wire_cache_delete_many_response(
361            self.inner.delete_many(tonic_request).await?.into_inner(),
362        );
363        Ok(response.deleted)
364    }
365
366    /// Calls `gestalt.provider.v1.Cache.DeleteMany` with the full request and response messages.
367    pub async fn delete_many_raw(
368        &mut self,
369        request: CacheDeleteManyRequest,
370    ) -> Result<CacheDeleteManyResponse, GestaltError> {
371        let mut tonic_request = tonic::Request::new(to_wire_cache_delete_many_request(request));
372        if let Some(timeout) = self.timeout {
373            tonic_request.set_timeout(timeout);
374        }
375        let response = self.inner.delete_many(tonic_request).await?;
376        Ok(from_wire_cache_delete_many_response(response.into_inner()))
377    }
378
379    /// Calls `gestalt.provider.v1.Cache.Touch`.
380    pub async fn touch(
381        &mut self,
382        key: String,
383        ttl: Option<std::time::Duration>,
384    ) -> Result<bool, GestaltError> {
385        let request = CacheTouchRequest { key, ttl };
386        let mut tonic_request = tonic::Request::new(to_wire_cache_touch_request(request));
387        if let Some(timeout) = self.timeout {
388            tonic_request.set_timeout(timeout);
389        }
390        let response =
391            from_wire_cache_touch_response(self.inner.touch(tonic_request).await?.into_inner());
392        Ok(response.touched)
393    }
394
395    /// Calls `gestalt.provider.v1.Cache.Touch` with the full request and response messages.
396    pub async fn touch_raw(
397        &mut self,
398        request: CacheTouchRequest,
399    ) -> Result<CacheTouchResponse, GestaltError> {
400        let mut tonic_request = tonic::Request::new(to_wire_cache_touch_request(request));
401        if let Some(timeout) = self.timeout {
402            tonic_request.set_timeout(timeout);
403        }
404        let response = self.inner.touch(tonic_request).await?;
405        Ok(from_wire_cache_touch_response(response.into_inner()))
406    }
407}