use crate::s3::error::ValidationErr;
use crate::s3::response_traits::{HasBucket, HasRegion, HasS3Fields};
use crate::s3::types::{S3Request, SseConfig};
use crate::s3::utils::{get_text_option, get_text_result};
use crate::{impl_from_s3response, impl_has_s3fields};
use bytes::{Buf, Bytes};
use http::HeaderMap;
use xmltree::Element;
#[derive(Clone, Debug)]
pub struct PutBucketEncryptionResponse {
request: S3Request,
headers: HeaderMap,
body: Bytes,
}
impl_from_s3response!(PutBucketEncryptionResponse);
impl_has_s3fields!(PutBucketEncryptionResponse);
impl HasBucket for PutBucketEncryptionResponse {}
impl HasRegion for PutBucketEncryptionResponse {}
impl PutBucketEncryptionResponse {
pub fn config(&self) -> Result<SseConfig, ValidationErr> {
let mut root = Element::parse(self.body().clone().reader())?;
let rule = root
.get_mut_child("Rule")
.ok_or(ValidationErr::xml_error("<Rule> tag not found"))?;
let sse_by_default = rule
.get_mut_child("ApplyServerSideEncryptionByDefault")
.ok_or(ValidationErr::xml_error(
"<ApplyServerSideEncryptionByDefault> tag not found",
))?;
Ok(SseConfig {
sse_algorithm: get_text_result(sse_by_default, "SSEAlgorithm")?,
kms_master_key_id: get_text_option(sse_by_default, "KMSMasterKeyID"),
})
}
}