xt_oss/oss/entities/
encryption.rs1use serde::{Deserialize, Serialize};
2use std::fmt;
3
4#[derive(Debug, Serialize, Deserialize, Default, Clone, Copy)]
5pub enum SSEAlgorithm {
6 KMS,
7 #[default]
8 AES256,
9 SM4,
10}
11
12impl fmt::Display for SSEAlgorithm {
13 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14 let value = match self {
15 Self::KMS => "KMS",
16 Self::AES256 => "AES256",
17 Self::SM4 => "SM4",
18 };
19 write!(f, "{}", value)
20 }
21}
22
23#[derive(Debug, Serialize, Deserialize, Default, Clone)]
24pub struct ApplyServerSideEncryptionByDefault {
25 #[serde(rename = "SSEAlgorithm")]
26 pub sse_algorithm: SSEAlgorithm,
27 #[serde(rename = "KMSDataEncryption", skip_serializing_if = "Option::is_none")]
28 pub kms_data_encryption: Option<String>,
29 #[serde(rename = "KMSMasterKeyID")]
30 pub kms_master_key_id: Option<String>,
31}
32
33#[derive(Debug, Serialize, Deserialize, Default, Clone)]
34pub struct ServerSideEncryptionRule {
35 #[serde(rename = "ApplyServerSideEncryptionByDefault")]
36 pub(crate) apply_server_side_encryption_by_default: ApplyServerSideEncryptionByDefault,
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42 #[test]
43 fn server_side_encryption_rule1() {
44 let xml_conrtent = r#"<ServerSideEncryptionRule><ApplyServerSideEncryptionByDefault> <SSEAlgorithm>KMS</SSEAlgorithm><KMSDataEncryption>SM4</KMSDataEncryption> <KMSMasterKeyID></KMSMasterKeyID></ApplyServerSideEncryptionByDefault></ServerSideEncryptionRule>"#;
45
46 let object: ServerSideEncryptionRule = quick_xml::de::from_str(xml_conrtent).unwrap();
47 assert_eq!(
48 object
49 .apply_server_side_encryption_by_default
50 .kms_data_encryption,
51 Some("SM4".to_string())
52 )
53 }
54
55 #[test]
56 fn server_side_encryption_rule2() {
57 let object = ServerSideEncryptionRule {
58 apply_server_side_encryption_by_default: ApplyServerSideEncryptionByDefault {
59 sse_algorithm: super::SSEAlgorithm::KMS,
60 kms_data_encryption: Some("9468da86-3509-4f8d-a61e-6eab1eac****".to_string()),
61 kms_master_key_id: None,
62 },
63 };
64 let left = r#"<ServerSideEncryptionRule><ApplyServerSideEncryptionByDefault><SSEAlgorithm>KMS</SSEAlgorithm><KMSDataEncryption>9468da86-3509-4f8d-a61e-6eab1eac****</KMSDataEncryption><KMSMasterKeyID/></ApplyServerSideEncryptionByDefault></ServerSideEncryptionRule>"#;
65
66 let right = quick_xml::se::to_string(&object).unwrap();
67 assert_eq!(left, right)
68 }
69
70 #[test]
71 fn server_side_encryption_rule3() {
72 let object = ServerSideEncryptionRule {
73 apply_server_side_encryption_by_default: ApplyServerSideEncryptionByDefault {
74 sse_algorithm: super::SSEAlgorithm::SM4,
75 kms_data_encryption: None,
76 kms_master_key_id: None,
77 },
78 };
79 let left = r#"<ServerSideEncryptionRule><ApplyServerSideEncryptionByDefault><SSEAlgorithm>SM4</SSEAlgorithm><KMSMasterKeyID/></ApplyServerSideEncryptionByDefault></ServerSideEncryptionRule>"#;
80
81 let right = quick_xml::se::to_string(&object).unwrap();
82 assert_eq!(left, right)
83 }
84
85 #[test]
86 fn server_side_encryption_rule4() {
87 let object = ServerSideEncryptionRule {
88 apply_server_side_encryption_by_default: ApplyServerSideEncryptionByDefault {
89 sse_algorithm: super::SSEAlgorithm::KMS,
90 kms_data_encryption: Some("SM4".to_string()),
91 kms_master_key_id: None,
92 },
93 };
94 let left = r#"<ServerSideEncryptionRule><ApplyServerSideEncryptionByDefault><SSEAlgorithm>KMS</SSEAlgorithm><KMSDataEncryption>SM4</KMSDataEncryption><KMSMasterKeyID/></ApplyServerSideEncryptionByDefault></ServerSideEncryptionRule>"#;
95 let right = quick_xml::se::to_string(&object).unwrap();
96 assert_eq!(left, right);
97 }
98}