1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Serialize, Deserialize, utoipa::ToSchema)]
7pub struct DeploymentSummary {
8 pub name: String,
10 pub status: String,
12 pub service_count: usize,
14 pub created_at: String,
16}
17
18#[derive(Debug, Serialize, Deserialize, utoipa::ToSchema)]
20pub struct ServiceHealthInfo {
21 pub name: String,
23 pub replicas_running: u32,
25 pub replicas_desired: u32,
27 pub health: String,
29 pub endpoints: Vec<String>,
31}
32
33#[derive(Debug, Serialize, Deserialize, utoipa::ToSchema)]
35pub struct DeploymentDetails {
36 pub name: String,
38 pub status: String,
40 pub services: Vec<String>,
42 pub service_health: Vec<ServiceHealthInfo>,
44 pub created_at: String,
46 pub updated_at: String,
48}
49
50#[derive(Debug, Deserialize, utoipa::ToSchema)]
52pub struct CreateDeploymentRequest {
53 pub spec: String,
55}
56
57#[derive(Debug, Clone, Serialize)]
59#[serde(tag = "kind", rename_all = "snake_case")]
60pub enum DeploymentProgressEvent {
61 Started {
63 deployment: String,
65 services: Vec<String>,
67 },
68 ServiceRegistered {
70 service: String,
72 },
73 ServiceRegistrationFailed {
75 service: String,
77 error: String,
79 },
80 OverlayCreated {
82 service: String,
84 interface: String,
86 },
87 OverlayFailed {
89 service: String,
91 error: String,
93 },
94 ProxyConfigured {
96 service: String,
98 },
99 ProxyFailed {
101 service: String,
103 error: String,
105 },
106 ServiceScaling {
108 service: String,
110 target: u32,
112 },
113 ServiceScaled {
115 service: String,
117 replicas: u32,
119 },
120 ServiceScaleFailed {
122 service: String,
124 error: String,
126 },
127 Stabilizing,
129 Ready,
131 Failed {
133 message: String,
135 },
136}
137
138#[derive(Debug, Clone, Serialize)]
143pub struct DeploymentEventWrapper {
144 #[serde(rename = "type")]
146 pub event_type: String,
147 pub data: serde_json::Value,
149}
150
151impl From<DeploymentProgressEvent> for DeploymentEventWrapper {
152 fn from(event: DeploymentProgressEvent) -> Self {
153 match event {
154 DeploymentProgressEvent::Started {
155 deployment,
156 services,
157 } => DeploymentEventWrapper {
158 event_type: "started".to_string(),
159 data: serde_json::json!({
160 "deployment": deployment,
161 "services": services,
162 }),
163 },
164 DeploymentProgressEvent::ServiceRegistered { service } => DeploymentEventWrapper {
165 event_type: "service_registered".to_string(),
166 data: serde_json::json!({ "service": service }),
167 },
168 DeploymentProgressEvent::ServiceRegistrationFailed { service, error } => {
169 DeploymentEventWrapper {
170 event_type: "service_registration_failed".to_string(),
171 data: serde_json::json!({ "service": service, "error": error }),
172 }
173 }
174 DeploymentProgressEvent::OverlayCreated { service, interface } => {
175 DeploymentEventWrapper {
176 event_type: "overlay_created".to_string(),
177 data: serde_json::json!({ "service": service, "interface": interface }),
178 }
179 }
180 DeploymentProgressEvent::OverlayFailed { service, error } => DeploymentEventWrapper {
181 event_type: "overlay_failed".to_string(),
182 data: serde_json::json!({ "service": service, "error": error }),
183 },
184 DeploymentProgressEvent::ProxyConfigured { service } => DeploymentEventWrapper {
185 event_type: "proxy_configured".to_string(),
186 data: serde_json::json!({ "service": service }),
187 },
188 DeploymentProgressEvent::ProxyFailed { service, error } => DeploymentEventWrapper {
189 event_type: "proxy_failed".to_string(),
190 data: serde_json::json!({ "service": service, "error": error }),
191 },
192 DeploymentProgressEvent::ServiceScaling { service, target } => DeploymentEventWrapper {
193 event_type: "service_scaling".to_string(),
194 data: serde_json::json!({ "service": service, "target": target }),
195 },
196 DeploymentProgressEvent::ServiceScaled { service, replicas } => {
197 DeploymentEventWrapper {
198 event_type: "service_scaled".to_string(),
199 data: serde_json::json!({ "service": service, "replicas": replicas }),
200 }
201 }
202 DeploymentProgressEvent::ServiceScaleFailed { service, error } => {
203 DeploymentEventWrapper {
204 event_type: "service_scale_failed".to_string(),
205 data: serde_json::json!({ "service": service, "error": error }),
206 }
207 }
208 DeploymentProgressEvent::Stabilizing => DeploymentEventWrapper {
209 event_type: "stabilizing".to_string(),
210 data: serde_json::json!({}),
211 },
212 DeploymentProgressEvent::Ready => DeploymentEventWrapper {
213 event_type: "ready".to_string(),
214 data: serde_json::json!({}),
215 },
216 DeploymentProgressEvent::Failed { message } => DeploymentEventWrapper {
217 event_type: "failed".to_string(),
218 data: serde_json::json!({ "message": message }),
219 },
220 }
221 }
222}