smbcloud_model/
deploy_config_update.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Serialize, Deserialize, Default)]
6pub struct DeployConfigUpdate {
7 #[serde(skip_serializing_if = "Option::is_none")]
8 pub runner: Option<u8>,
9 #[serde(skip_serializing_if = "Option::is_none")]
10 pub deployment_method: Option<u8>,
11 #[serde(skip_serializing_if = "Option::is_none")]
12 pub kind: Option<String>,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub source_path: Option<String>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub remote_path: Option<String>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub package_manager: Option<String>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub pm2_app: Option<String>,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub pm2_env: Option<std::collections::HashMap<String, serde_json::Value>>,
23 #[serde(skip_serializing_if = "Option::is_none")]
24 pub port: Option<u16>,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub output_path: Option<String>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub build_command: Option<String>,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub install_command: Option<String>,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub binary_name: Option<String>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub build_target: Option<String>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub shared_lib_path: Option<String>,
37}
38
39impl DeployConfigUpdate {
40 pub fn is_empty(&self) -> bool {
42 self.runner.is_none()
43 && self.deployment_method.is_none()
44 && self.kind.is_none()
45 && self.source_path.is_none()
46 && self.remote_path.is_none()
47 && self.package_manager.is_none()
48 && self.pm2_app.is_none()
49 && self.pm2_env.is_none()
50 && self.port.is_none()
51 && self.output_path.is_none()
52 && self.build_command.is_none()
53 && self.install_command.is_none()
54 && self.binary_name.is_none()
55 && self.build_target.is_none()
56 && self.shared_lib_path.is_none()
57 }
58}
59
60#[cfg(test)]
61mod tests {
62 use super::DeployConfigUpdate;
63 use serde_json::json;
64 use std::collections::HashMap;
65
66 #[test]
67 fn detects_non_empty_pm2_env() {
68 let mut pm2_env = HashMap::new();
69 pm2_env.insert("APP_PUBLIC_URL".to_string(), json!("https://example.com"));
70
71 let payload = DeployConfigUpdate {
72 pm2_env: Some(pm2_env),
73 ..DeployConfigUpdate::default()
74 };
75
76 assert!(!payload.is_empty());
77 }
78}