xt_oss/oss/entities/
encryption.rs

1use 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}