use schemars::JsonSchema;
use serde::Deserialize;
use crate::core::dns::records::{RecordData, RecordSelector};
use crate::core::dns::zones::ZoneImportOptions;
#[derive(Deserialize, JsonSchema)]
pub struct ServerScopeParams {
pub server_id: String,
}
#[derive(Deserialize, JsonSchema)]
pub struct ZoneParams {
pub server_id: String,
pub zone: String,
}
#[derive(Deserialize, JsonSchema)]
pub struct ListZonesParams {
pub server_id: String,
pub page_number: Option<u32>,
pub zones_per_page: Option<u32>,
}
#[derive(Deserialize, JsonSchema)]
pub struct CreateZoneParams {
pub server_id: String,
pub zone: String,
pub zone_type: String,
}
#[derive(Deserialize, JsonSchema)]
pub struct ExportZoneFileParams {
pub server_id: String,
pub zone: String,
}
#[derive(Deserialize, JsonSchema)]
pub struct ImportZoneFileParams {
pub server_id: String,
pub zone: String,
pub content: String,
pub file_name: Option<String>,
#[serde(flatten)]
pub options: ZoneImportOptions,
}
#[derive(Deserialize, JsonSchema)]
pub struct ListRecordsParams {
pub server_id: String,
pub domain: String,
pub zone: Option<String>,
#[serde(default, rename = "useLocalIp", alias = "use_local_ip")]
pub use_local_ip: Option<bool>,
}
#[derive(Deserialize, JsonSchema)]
pub struct AddRecordParams {
pub server_id: String,
pub zone: String,
pub domain: String,
pub ttl: Option<u32>,
pub record: RecordData,
}
#[derive(Deserialize, JsonSchema)]
pub struct DeleteRecordParams {
pub server_id: String,
pub zone: String,
pub domain: String,
pub record: RecordSelector,
}
#[derive(Deserialize, JsonSchema)]
pub struct DomainParams {
pub server_id: String,
pub domain: String,
}
#[derive(Deserialize, JsonSchema)]
pub struct StatsParams {
pub server_id: String,
pub stats_type: Option<String>,
}
#[derive(Deserialize, JsonSchema)]
pub struct ResolveParams {
pub domain: String,
#[serde(default)]
pub types: Option<Vec<String>>,
#[serde(default)]
pub server_id: Option<String>,
#[serde(default)]
pub at: Option<String>,
#[serde(default)]
pub transports: Option<Vec<String>>,
#[serde(default)]
pub all_transports: Option<bool>,
#[serde(default)]
pub port: Option<u16>,
#[serde(default)]
pub tls_server_name: Option<String>,
#[serde(default)]
pub timeout_ms: Option<u64>,
}