use clap::Args;
use schemars::JsonSchema;
use serde::Deserialize;
use serde_json::Value;
use crate::core::{
dns::service::{ZoneExport, ZoneImport, ZoneRead, ZoneWrite},
error::Result,
};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ZoneSummary {
pub name: String,
pub zone_type: String,
pub disabled: bool,
}
#[derive(Debug, Clone, Args, Deserialize, JsonSchema)]
pub struct ZoneImportOptions {
#[arg(long, default_value_t = true)]
#[serde(default = "default_overwrite")]
pub overwrite: bool,
#[arg(long, default_value_t = false)]
#[serde(default)]
pub overwrite_zone: bool,
#[arg(long, default_value_t = false)]
#[serde(default)]
pub overwrite_soa_serial: bool,
}
fn default_overwrite() -> bool {
true
}
pub async fn list_zones<C: ZoneRead + ?Sized>(
client: &C,
page: u32,
per_page: u32,
) -> Result<Value> {
client.list_zones(page, per_page).await
}
pub async fn create_zone<C: ZoneWrite + ?Sized>(
client: &C,
zone: &str,
zone_type: &str,
) -> Result<Value> {
client.create_zone(zone, zone_type).await
}
pub async fn delete_zone<C: ZoneWrite + ?Sized>(client: &C, zone: &str) -> Result<Value> {
client.delete_zone(zone).await
}
pub async fn enable_zone<C: ZoneWrite + ?Sized>(client: &C, zone: &str) -> Result<Value> {
client.enable_zone(zone).await
}
pub async fn disable_zone<C: ZoneWrite + ?Sized>(client: &C, zone: &str) -> Result<Value> {
client.disable_zone(zone).await
}
pub async fn import_zone_file<C: ZoneImport + ?Sized>(
client: &C,
zone: &str,
file_name: String,
file_bytes: Vec<u8>,
overwrite: bool,
overwrite_zone: bool,
overwrite_soa_serial: bool,
) -> Result<Value> {
client
.import_zone_file(
zone,
file_name,
file_bytes,
overwrite,
overwrite_zone,
overwrite_soa_serial,
)
.await
}
pub async fn export_zone_file<C: ZoneExport + ?Sized>(client: &C, zone: &str) -> Result<String> {
client.export_zone_file(zone).await
}