use super::error::PdnsAPIError;
use super::result::Result;
use serde::Deserialize;
use std::fmt;
use tabled::Tabled;
#[derive(Debug, Deserialize, Clone, PartialEq, Eq, Tabled)]
pub struct Server {
#[tabled(order = 0)]
pub id: String,
#[tabled(order = 1)]
pub daemon_type: String,
#[tabled(order = 2)]
pub version: String,
#[serde(rename = "type")] #[tabled(skip)]
pub server_type: String,
#[tabled(skip)]
pub url: String,
#[tabled(skip)]
pub config_url: String,
#[tabled(skip)]
pub zones_url: String,
#[tabled(skip)]
pub autoprimaries: String,
}
impl fmt::Display for Server {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"pdns server with id={}, type={}, daemon_type={}",
self.id, self.server_type, self.daemon_type
)
}
}
impl super::Client {
pub fn list_servers(&self) -> Result<Vec<Server>> {
let url = self.base_url.join("servers")?;
let resp = self.client.get(url).send()?;
let status = resp.status();
if status != http::StatusCode::OK {
return Err(resp.json::<PdnsAPIError>()?.into());
}
Ok(resp.json()?) }
pub fn list_server(&self, server_id: &str) -> Result<Server> {
let url = self.base_url.join(&format!("servers/{server_id}"))?;
let resp = self.client.get(url).send()?;
let status = resp.status();
if status != http::StatusCode::OK {
return Err(resp.json::<PdnsAPIError>()?.into());
}
Ok(resp.json()?) }
}