use chrono::{offset::Utc, DateTime};
use uuid::Uuid;
use crate::framework::ApiResultTraits;
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub struct Tunnel {
pub id: Uuid,
pub created_at: DateTime<Utc>,
pub deleted_at: Option<DateTime<Utc>>,
pub name: String,
pub connections: Vec<ActiveConnection>,
pub metadata: serde_json::Value,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub struct ActiveConnection {
pub colo_name: String,
pub id: Uuid,
pub is_pending_reconnect: bool,
}
impl ApiResultTraits for Tunnel {}
impl ApiResultTraits for Vec<Tunnel> {}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
#[serde(untagged)]
pub enum RouteResult {
Dns(DnsRouteResult),
Lb(LoadBalancerRouteResult),
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub struct DnsRouteResult {
pub cname: Change,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub struct LoadBalancerRouteResult {
pub load_balancer: Change,
pub pool: Change,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum Change {
Unchanged,
New,
Updated,
}
impl ApiResultTraits for RouteResult {}