#![allow(unused_imports)]
use crate::Result;
use olai_http::CloudClient;
use unitycatalog_common::models::temporary_credentials::v1::*;
use url::Url;
#[derive(Clone)]
pub struct TemporaryCredentialClient {
pub(crate) client: CloudClient,
pub(crate) base_url: Url,
}
impl TemporaryCredentialClient {
pub fn new(client: CloudClient, mut base_url: Url) -> Self {
if !base_url.path().ends_with('/') {
base_url.set_path(&format!("{}/", base_url.path()));
}
Self { client, base_url }
}
pub async fn generate_temporary_table_credentials(
&self,
request: &GenerateTemporaryTableCredentialsRequest,
) -> Result<TemporaryCredential> {
let url = self.base_url.join("temporary-table-credentials")?;
let response = self.client.post(url).json(request).send().await?;
if !response.status().is_success() {
return Err(crate::error::parse_error_response(response).await);
}
let result = response.bytes().await?;
Ok(serde_json::from_slice(&result)?)
}
pub async fn generate_temporary_path_credentials(
&self,
request: &GenerateTemporaryPathCredentialsRequest,
) -> Result<TemporaryCredential> {
let url = self.base_url.join("temporary-path-credentials")?;
let response = self.client.post(url).json(request).send().await?;
if !response.status().is_success() {
return Err(crate::error::parse_error_response(response).await);
}
let result = response.bytes().await?;
Ok(serde_json::from_slice(&result)?)
}
pub async fn generate_temporary_volume_credentials(
&self,
request: &GenerateTemporaryVolumeCredentialsRequest,
) -> Result<TemporaryCredential> {
let url = self.base_url.join("temporary-volume-credentials")?;
let response = self.client.post(url).json(request).send().await?;
if !response.status().is_success() {
return Err(crate::error::parse_error_response(response).await);
}
let result = response.bytes().await?;
Ok(serde_json::from_slice(&result)?)
}
pub async fn generate_temporary_model_version_credentials(
&self,
request: &GenerateTemporaryModelVersionCredentialsRequest,
) -> Result<TemporaryCredential> {
let url = self.base_url.join("temporary-model-version-credentials")?;
let response = self.client.post(url).json(request).send().await?;
if !response.status().is_success() {
return Err(crate::error::parse_error_response(response).await);
}
let result = response.bytes().await?;
Ok(serde_json::from_slice(&result)?)
}
}