use crate::server::ServerId;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServerInfo {
pub name: String,
pub id: String,
pub status: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum SSEEvent {
#[serde(rename = "server-status")]
ServerStatus {
server_name: String,
server_id: String,
status: String,
},
#[serde(rename = "notification")]
Notification {
title: String,
message: String,
level: String,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SSEMessage {
pub event: String,
pub data: String,
pub id: Option<String>,
}
impl SSEMessage {
pub fn new(event: &str, data: &str, id: Option<&str>) -> Self {
Self {
event: event.to_string(),
data: data.to_string(),
id: id.map(String::from),
}
}
}
#[derive(Debug, Clone)]
pub enum ServerInfoUpdate {
UpdateServer {
name: String,
id: Option<ServerId>,
status: String,
},
AddServer {
name: String,
info: ServerInfo,
},
Shutdown,
}