use std::fmt::Display;
use aide::OperationIo;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::v1alpha1::Url;
pub type AlertId = Uuid;
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema, OperationIo)]
#[serde(rename_all = "camelCase")]
pub struct Alert {
pub id: AlertId,
pub name: String,
pub owner_ref: String,
pub config: AlertConfig,
pub status: AlertStatus,
}
impl Display for Alert {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{} - {}", self.name, self.config.provider)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct CreateAlert {
pub name: String,
pub owner_ref: String,
pub config: AlertConfig,
}
impl From<Alert> for CreateAlert {
fn from(value: Alert) -> Self {
CreateAlert {
name: value.name,
owner_ref: value.owner_ref,
config: value.config,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct AlertConfig {
pub provider: Provider,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema, Default)]
#[serde(rename_all = "camelCase")]
pub struct AlertStatus {}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub enum Provider {
Discord(Discord),
Webhook(Webhook),
}
impl Display for Provider {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{}",
match self {
Provider::Discord(_) => "Discord",
Provider::Webhook(_) => "Webhook",
}
)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct Discord {
pub webhook_url: Url,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct Webhook {
pub url: Url,
pub payload: String,
}