use crate::oss::{
self,
api::{self, insert_custom_header, ApiResponseFrom},
entities::{acl::AccessControlPolicy, OssAcl},
http,
};
#[derive(Debug)]
pub struct PutBucketAclBuilder<'a> {
client: &'a oss::Client<'a>,
acl: OssAcl,
}
#[allow(unused)]
impl<'a> PutBucketAclBuilder<'a> {
pub fn new(client: &'a oss::Client, acl: OssAcl) -> Self {
Self { client, acl }
}
pub async fn execute(&self) -> api::ApiResult<()> {
let res = format!("/{}/?{}", self.client.bucket(), "acl");
let url = { format!("{}/?{}", self.client.base_url(), "acl") };
let mut headers = http::HeaderMap::new();
insert_custom_header(&mut headers, "x-oss-acl", self.acl.to_string());
let resp = self
.client
.request
.task()
.with_url(&url)
.with_method(http::Method::PUT)
.with_headers(headers)
.with_resource(&res)
.execute_timeout(self.client.timeout())
.await?;
Ok(ApiResponseFrom(resp).to_empty().await)
}
}
pub struct GetBucketAclBuilder<'a> {
client: &'a oss::Client<'a>,
}
impl<'a> GetBucketAclBuilder<'a> {
pub(crate) fn new(client: &'a oss::Client) -> Self {
Self { client }
}
pub async fn execute(&self) -> api::ApiResult<AccessControlPolicy> {
let res = format!("/{}/?{}", self.client.bucket(), "acl");
let url = format!("{}/?{}", self.client.base_url(), "acl");
let resp = self
.client
.request
.task()
.with_url(&url)
.with_resource(&res)
.execute_timeout(self.client.timeout())
.await?;
Ok(ApiResponseFrom(resp).to_type().await)
}
}
#[allow(non_snake_case)]
impl<'a> oss::Client<'a> {
pub fn PutBucketAcl(&self, acl: OssAcl) -> PutBucketAclBuilder {
PutBucketAclBuilder::new(self, acl)
}
pub fn GetBucketAcl(&self) -> GetBucketAclBuilder {
GetBucketAclBuilder::new(&self)
}
}