use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use uuid::Uuid; #[derive(Clone, Debug, Serialize)] #[serde(rename_all = "camelCase")] pub struct Snapshot { pub categories: Vec, pub incidents: Vec, pub generated_at: DateTime, } #[derive(Clone, Debug, Serialize)] #[serde(rename_all = "camelCase")] pub struct Category { pub id: String, pub name: String, pub logo: String, pub services: Vec, } #[derive(Clone, Debug, Serialize)] #[serde(rename_all = "camelCase")] pub struct Service { pub id: String, pub name: String, pub url: String, pub check_http3: bool, pub status: ServiceStatus, pub status_code: Option, pub latency_ms: Option, pub error: Option, pub checked_at: Option>, } #[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize)] #[serde(rename_all = "snake_case")] pub enum ServiceStatus { Unknown, Online, Offline, TimedOut, HttpError, Http3Error, } #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct Incident { pub id: Uuid, pub title: String, pub message: String, pub severity: Severity, pub created_at: DateTime, pub resolved_at: Option>, } #[derive(Clone, Copy, Debug, Deserialize, Serialize)] #[serde(rename_all = "snake_case")] pub enum Severity { Minor, Major, Critical, } #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase", deny_unknown_fields)] pub struct NewIncident { pub title: String, pub message: String, pub severity: Severity, }