aliyun_oss_rs/object/
get_object_acl.rs1use crate::common::body_to_bytes;
2use crate::{
3 Error,
4 common::Acl,
5 error::normal_error,
6 request::{Oss, OssRequest},
7};
8use http::Method;
9use serde_derive::Deserialize;
10
11#[derive(Debug, Deserialize)]
14struct AccessControlPolicy {
15 #[serde(rename = "AccessControlList")]
16 access_control_list: AccessControlList,
17}
18
19#[derive(Debug, Deserialize)]
20struct AccessControlList {
21 #[serde(rename = "Grant")]
22 grant: Acl,
23}
24
25pub struct GetObjectAcl {
29 req: OssRequest,
30}
31impl GetObjectAcl {
32 pub(super) fn new(oss: Oss) -> Self {
33 let mut req = OssRequest::new(oss, Method::GET);
34 req.insert_query("acl", "");
35 GetObjectAcl { req }
36 }
37 pub async fn send(self) -> Result<Acl, Error> {
40 let response = self.req.send_to_oss()?.await?;
42 let status_code = response.status();
44 match status_code {
45 code if code.is_success() => {
46 let response_bytes = body_to_bytes(response.into_body())
47 .await
48 .map_err(|_| Error::OssInvalidResponse(None))?;
49 let acl: AccessControlPolicy = serde_xml_rs::from_reader(&*response_bytes)
50 .map_err(|_| Error::OssInvalidResponse(Some(response_bytes)))?;
51 Ok(acl.access_control_list.grant)
52 }
53 _ => Err(normal_error(response).await),
54 }
55 }
56}