composio_sdk/models/
project.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
7#[serde(rename_all = "snake_case")]
8pub enum ProjectLogVisibilitySetting {
9 ShowAll,
11 DontStoreData,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
17pub struct ProjectConfigResponse {
18 #[serde(rename = "is_2FA_enabled", alias = "is_2_fa_enabled")]
20 pub is_2_fa_enabled: bool,
21
22 pub log_visibility_setting: ProjectLogVisibilitySetting,
24
25 pub mask_secret_keys_in_connected_account: bool,
27
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub display_name: Option<String>,
31
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub is_composio_link_enabled_for_managed_auth: Option<bool>,
35
36 #[serde(skip_serializing_if = "Option::is_none")]
38 pub logo_url: Option<String>,
39
40 #[serde(skip_serializing_if = "Option::is_none")]
42 pub require_mcp_api_key: Option<bool>,
43
44 #[serde(skip_serializing_if = "Option::is_none")]
46 pub signed_url_file_expiry_in_seconds: Option<f64>,
47}
48
49#[derive(Debug, Clone, Serialize, Default, PartialEq)]
51pub struct ProjectConfigUpdateParams {
52 #[serde(skip_serializing_if = "Option::is_none")]
54 pub display_name: Option<String>,
55
56 #[serde(
58 rename = "is_2FA_enabled",
59 alias = "is_2_fa_enabled",
60 skip_serializing_if = "Option::is_none"
61 )]
62 pub is_2_fa_enabled: Option<bool>,
63
64 #[serde(skip_serializing_if = "Option::is_none")]
66 pub is_composio_link_enabled_for_managed_auth: Option<bool>,
67
68 #[serde(skip_serializing_if = "Option::is_none")]
70 pub log_visibility_setting: Option<ProjectLogVisibilitySetting>,
71
72 #[serde(skip_serializing_if = "Option::is_none")]
74 pub logo_url: Option<String>,
75
76 #[serde(skip_serializing_if = "Option::is_none")]
78 pub mask_secret_keys_in_connected_account: Option<bool>,
79
80 #[serde(skip_serializing_if = "Option::is_none")]
82 pub require_mcp_api_key: Option<bool>,
83
84 #[serde(skip_serializing_if = "Option::is_none")]
86 pub signed_url_file_expiry_in_seconds: Option<f64>,
87}
88
89#[cfg(test)]
90mod tests {
91 use super::*;
92
93 #[test]
94 fn test_project_config_update_serialization() {
95 let params = ProjectConfigUpdateParams {
96 display_name: Some("Engineering".to_string()),
97 is_2_fa_enabled: Some(true),
98 is_composio_link_enabled_for_managed_auth: None,
99 log_visibility_setting: Some(ProjectLogVisibilitySetting::DontStoreData),
100 logo_url: None,
101 mask_secret_keys_in_connected_account: Some(true),
102 require_mcp_api_key: Some(false),
103 signed_url_file_expiry_in_seconds: Some(900.0),
104 };
105
106 let json = serde_json::to_value(¶ms).unwrap();
107 assert_eq!(json["display_name"], "Engineering");
108 assert_eq!(json["is_2FA_enabled"], true);
109 assert_eq!(json["log_visibility_setting"], "dont_store_data");
110 assert!(json.get("logo_url").is_none());
111 }
112
113 #[test]
114 fn test_project_config_response_deserialization_with_2fa_alias() {
115 let payload = r#"{
116 "is_2FA_enabled": true,
117 "log_visibility_setting": "show_all",
118 "mask_secret_keys_in_connected_account": false,
119 "display_name": "Acme",
120 "require_mcp_api_key": true
121 }"#;
122
123 let response: ProjectConfigResponse = serde_json::from_str(payload).unwrap();
124 assert!(response.is_2_fa_enabled);
125 assert_eq!(
126 response.log_visibility_setting,
127 ProjectLogVisibilitySetting::ShowAll
128 );
129 assert_eq!(response.display_name.as_deref(), Some("Acme"));
130 assert_eq!(response.require_mcp_api_key, Some(true));
131 }
132
133 #[test]
134 fn test_project_config_response_deserialization_with_snake_case_alias() {
135 let payload = r#"{
136 "is_2_fa_enabled": false,
137 "log_visibility_setting": "dont_store_data",
138 "mask_secret_keys_in_connected_account": true
139 }"#;
140
141 let response: ProjectConfigResponse = serde_json::from_str(payload).unwrap();
142 assert!(!response.is_2_fa_enabled);
143 assert_eq!(
144 response.log_visibility_setting,
145 ProjectLogVisibilitySetting::DontStoreData
146 );
147 assert!(response.mask_secret_keys_in_connected_account);
148 }
149}