1use serde::Deserialize;
9
10#[derive(Debug, Clone, Deserialize)]
20#[serde(deny_unknown_fields)]
21pub struct CmsEstConfig {
22 #[serde(default)]
24 pub enabled: bool,
25
26 #[serde(default = "default_true")]
28 pub require_signed_requests: bool,
29
30 #[serde(default = "default_true")]
32 pub encrypt_responses: bool,
33
34 #[serde(default = "default_allowed_content_encryption")]
36 pub allowed_content_encryption: Vec<String>,
37}
38
39fn default_true() -> bool {
40 true
41}
42
43fn default_allowed_content_encryption() -> Vec<String> {
44 vec!["AES-256-GCM".to_string(), "AES-128-GCM".to_string()]
45}
46
47impl Default for CmsEstConfig {
48 fn default() -> Self {
49 Self {
50 enabled: false,
51 require_signed_requests: true,
52 encrypt_responses: true,
53 allowed_content_encryption: default_allowed_content_encryption(),
54 }
55 }
56}
57
58impl CmsEstConfig {
59 pub fn validate(&self) -> Result<(), String> {
61 if self.encrypt_responses && self.allowed_content_encryption.is_empty() {
62 return Err(
63 "[cms_est].allowed_content_encryption must not be empty when encrypt_responses is true"
64 .into(),
65 );
66 }
67
68 Ok(())
69 }
70}