1use crate::codec::secrets::{from_wire_get_secret_response, to_wire_get_secret_request};
6use crate::generated::v1;
7use crate::rpc_support::GestaltError;
8
9#[derive(Clone, Debug, Default, PartialEq)]
13pub struct GetSecretRequest {
14 pub name: String,
16}
17
18#[derive(Clone, Debug, Default, PartialEq)]
22pub struct GetSecretResponse {
23 pub value: String,
25}
26
27pub struct Secrets {
31 inner: v1::secrets_client::SecretsClient<tonic::transport::Channel>,
32 timeout: Option<std::time::Duration>,
33}
34
35impl Secrets {
36 pub fn new(channel: tonic::transport::Channel) -> Self {
38 Self {
39 inner: v1::secrets_client::SecretsClient::new(channel),
40 timeout: None,
41 }
42 }
43
44 pub fn with_timeout(mut self, timeout: std::time::Duration) -> Self {
47 self.timeout = Some(timeout);
48 self
49 }
50
51 pub async fn get_secret(&mut self, name: String) -> Result<String, GestaltError> {
53 let request = GetSecretRequest { name };
54 let mut tonic_request = tonic::Request::new(to_wire_get_secret_request(request));
55 if let Some(timeout) = self.timeout {
56 tonic_request.set_timeout(timeout);
57 }
58 let response =
59 from_wire_get_secret_response(self.inner.get_secret(tonic_request).await?.into_inner());
60 Ok(response.value)
61 }
62
63 pub async fn get_secret_raw(
65 &mut self,
66 request: GetSecretRequest,
67 ) -> Result<GetSecretResponse, GestaltError> {
68 let mut tonic_request = tonic::Request::new(to_wire_get_secret_request(request));
69 if let Some(timeout) = self.timeout {
70 tonic_request.set_timeout(timeout);
71 }
72 let response = self.inner.get_secret(tonic_request).await?;
73 Ok(from_wire_get_secret_response(response.into_inner()))
74 }
75}