use std::collections::HashMap;
use std::net::IpAddr;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::types::ServiceRecord;
pub trait StatusReporter: Send + Sync {
fn capability_name(&self) -> &'static str;
fn is_running(&self) -> bool;
fn status_detail(&self) -> Option<String> {
None
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemberSummary {
pub hostname: String,
pub sans: Vec<String>,
pub cert_expires: Option<DateTime<Utc>>,
pub last_seen: Option<DateTime<Utc>>,
pub status: String,
pub proxy_entries: Vec<ProxyConfigSummary>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProxyConfigSummary {
pub name: String,
pub listen_port: u16,
pub backend: String,
pub allow_remote: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProxyEntrySummary {
pub name: String,
pub listen_port: u16,
pub backend: String,
}
pub trait CertmeshSnapshot: Send + Sync {
fn active_members(&self) -> Vec<MemberSummary>;
}
pub trait MdnsSnapshot: Send + Sync {
fn host_ips(&self) -> HashMap<String, IpAddr>;
fn cached_records(&self) -> Vec<ServiceRecord>;
}
pub trait DnsProbe: Send + Sync {
fn resolve_local(&self, name: &str) -> Option<Vec<IpAddr>>;
}
pub trait ProxySnapshot: Send + Sync {
fn entries(&self) -> Vec<ProxyEntrySummary>;
}
pub trait AliasFeedback: Send + Sync {
fn record_alias(&self, hostname: &str, alias: &str);
}