use crate::codec::secrets::{from_wire_get_secret_response, to_wire_get_secret_request};
use crate::generated::v1;
use crate::rpc_support::GestaltError;
#[derive(Clone, Debug, Default, PartialEq)]
pub struct GetSecretRequest {
pub name: String,
}
#[derive(Clone, Debug, Default, PartialEq)]
pub struct GetSecretResponse {
pub value: String,
}
pub struct Secrets {
inner: v1::secrets_client::SecretsClient<tonic::transport::Channel>,
timeout: Option<std::time::Duration>,
}
impl Secrets {
pub fn new(channel: tonic::transport::Channel) -> Self {
Self {
inner: v1::secrets_client::SecretsClient::new(channel),
timeout: None,
}
}
pub fn with_timeout(mut self, timeout: std::time::Duration) -> Self {
self.timeout = Some(timeout);
self
}
pub async fn get_secret(&mut self, name: String) -> Result<String, GestaltError> {
let request = GetSecretRequest { name };
let mut tonic_request = tonic::Request::new(to_wire_get_secret_request(request));
if let Some(timeout) = self.timeout {
tonic_request.set_timeout(timeout);
}
let response =
from_wire_get_secret_response(self.inner.get_secret(tonic_request).await?.into_inner());
Ok(response.value)
}
pub async fn get_secret_raw(
&mut self,
request: GetSecretRequest,
) -> Result<GetSecretResponse, GestaltError> {
let mut tonic_request = tonic::Request::new(to_wire_get_secret_request(request));
if let Some(timeout) = self.timeout {
tonic_request.set_timeout(timeout);
}
let response = self.inner.get_secret(tonic_request).await?;
Ok(from_wire_get_secret_response(response.into_inner()))
}
}