use chrono::DateTime;
use chrono::offset::Utc;
use cloudflare::endpoints::{
zone::{
HostingPartner,
ListZonesParams,
Owner,
Status,
Type,
},
};
use cloudflare::framework::{
endpoint::{Endpoint, Method},
response::ApiResult,
};
use crate::api::endpoints::plan::Plan;
use crate::api::endpoints::account::Account;
#[derive(Deserialize, Debug)]
#[serde(transparent)]
pub struct ZoneVec {
pub zones: Vec<Zone>
}
pub struct ListZones {
pub params: ListZonesParams
}
impl Endpoint<ZoneVec, ListZonesParams> for ListZones {
fn method(&self) -> Method {
Method::Get
}
fn path(&self) -> String {
"zones".to_string()
}
fn query(&self) -> Option<ListZonesParams> {
Some(self.params.clone())
}
}
#[derive(Deserialize, Debug)]
pub struct Meta {
pub auto_added: Option<bool>,
}
#[derive(Deserialize, Debug)]
pub struct Zone {
pub id: String,
pub name: String,
pub account: Account,
pub betas: Option<Vec<String>>,
pub created_on: DateTime<Utc>,
pub deactivation_reason: Option<String>,
pub development_mode: u8,
pub host: Option<HostingPartner>,
pub meta: Meta,
pub modified_on: DateTime<Utc>,
pub name_servers: Vec<String>,
pub original_dnshost: Option<String>,
pub original_name_servers: Option<Vec<String>>,
pub original_registrar: Option<String>,
pub owner: Owner,
pub paused: bool,
pub permissions: Vec<String>,
pub plan: Option<Plan>,
pub plan_pending: Option<Plan>,
pub status: Status,
pub vanity_name_servers: Option<Vec<String>>,
#[serde(rename = "type")]
pub zone_type: Type,
}
impl ApiResult for Zone {}
impl ApiResult for ZoneVec {}