use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "kebab-case")]
pub enum CertificateStatus {
Pending,
Issued,
Renewing,
RenewalFailed,
Failed,
Deleting,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "lowercase")]
pub enum DnsRecordStatus {
Pending,
Active,
Updating,
Deleting,
Failed,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct ManagedDomainInfo {
pub fqdn: String,
pub certificate_id: String,
pub certificate_status: CertificateStatus,
pub dns_status: DnsRecordStatus,
#[serde(skip_serializing_if = "Option::is_none")]
pub dns_error: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub certificate_chain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub private_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub issued_at: Option<String>,
}
pub type PublicEndpointDomainInfo = ManagedDomainInfo;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct ResourceDomainInfo {
pub fqdn: String,
pub certificate_id: String,
pub certificate_status: CertificateStatus,
pub dns_status: DnsRecordStatus,
#[serde(skip_serializing_if = "Option::is_none")]
pub dns_error: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub certificate_chain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub private_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub issued_at: Option<String>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub endpoints: HashMap<String, PublicEndpointDomainInfo>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub aliases: Vec<ManagedDomainInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct DomainMetadata {
pub base_domain: String,
pub public_subdomain: String,
pub hosted_zone_id: String,
pub resources: HashMap<String, ResourceDomainInfo>,
}