use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, ToSchema)]
pub struct RegisterPayload {
pub name: String,
#[serde(rename = "type")]
pub service_type: String,
pub port: u16,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub ip: Option<String>,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub lease_secs: Option<u64>,
#[serde(default)]
pub txt: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, ToSchema)]
pub struct RegistrationResult {
pub id: String,
pub name: String,
#[serde(rename = "type")]
pub service_type: String,
pub port: u16,
pub mode: LeaseMode,
#[serde(skip_serializing_if = "Option::is_none")]
pub lease_secs: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, ToSchema)]
pub struct RenewalResult {
pub id: String,
pub lease_secs: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, ToSchema)]
#[serde(rename_all = "lowercase")]
pub enum LeaseMode {
Session,
Heartbeat,
Permanent,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, ToSchema)]
#[serde(rename_all = "lowercase")]
pub enum LeaseState {
Alive,
Draining,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct AdminRegistration {
pub id: String,
pub name: String,
#[serde(rename = "type")]
pub service_type: String,
pub port: u16,
pub mode: LeaseMode,
pub state: LeaseState,
#[serde(skip_serializing_if = "Option::is_none")]
pub lease_secs: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remaining_secs: Option<u64>,
pub grace_secs: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub session_id: Option<String>,
pub registered_at: String,
pub last_seen: String,
#[serde(default)]
pub txt: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct DaemonStatus {
pub version: String,
pub uptime_secs: u64,
pub platform: String,
pub registrations: RegistrationCounts,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct RegistrationCounts {
pub alive: usize,
pub draining: usize,
pub permanent: usize,
pub total: usize,
}