aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2022-10-22 16:56:26 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2022-10-22 16:56:26 +0200
commitcc26d8e46e9b4ddf8f79b837b70aa5c35bac77a7 (patch)
treecad8c91a66fc540bdedd3e3dd122289169045f8e
parent2c6db8f62e8143fe565bad79af785d5e7ad043a0 (diff)
make record response parameters optional according to api docs
-rw-r--r--src/response/nameserver.rs76
1 files changed, 45 insertions, 31 deletions
diff --git a/src/response/nameserver.rs b/src/response/nameserver.rs
index c5fb9fc..38f03b0 100644
--- a/src/response/nameserver.rs
+++ b/src/response/nameserver.rs
@@ -160,12 +160,12 @@ pub struct Record {
pub content: String,
pub ttl: i32,
pub priority: i32,
- pub url_rdr_type: UrlRdrType,
- pub url_rdr_title: String,
- pub url_rdr_desc: String,
- pub url_rdr_keywords: String,
- pub url_rdr_favicon: String,
- pub url_append: bool,
+ pub url_rdr_type: Option<UrlRdrType>,
+ pub url_rdr_title: Option<String>,
+ pub url_rdr_desc: Option<String>,
+ pub url_rdr_keywords: Option<String>,
+ pub url_rdr_favicon: Option<String>,
+ pub url_append: Option<bool>,
}
impl TryFrom<xmlrpc::Value> for Record {
@@ -179,12 +179,15 @@ impl TryFrom<xmlrpc::Value> for Record {
content: get_str(&map, "content")?,
ttl: get_i32(&map, "ttl")?,
priority: get_i32(&map, "prio")?,
- url_rdr_type: get_str(&map, "urlRedirectType")?.try_into()?,
- url_rdr_title: get_str(&map, "urlRedirectTitle")?,
- url_rdr_desc: get_str(&map, "urlRedirectDescription")?,
- url_rdr_keywords: get_str(&map, "urlRedirectKeywords")?,
- url_rdr_favicon: get_str(&map, "urlRedirectFavIcon")?,
- url_append: get_bool(&map, "urlAppend")?,
+ url_rdr_type: match get_str(&map, "urlRedirectType").ok() {
+ Some(url_rdr_type) => url_rdr_type.try_into().ok(),
+ None => None,
+ },
+ url_rdr_title: get_str(&map, "urlRedirectTitle").ok(),
+ url_rdr_desc: get_str(&map, "urlRedirectDescription").ok(),
+ url_rdr_keywords: get_str(&map, "urlRedirectKeywords").ok(),
+ url_rdr_favicon: get_str(&map, "urlRedirectFavIcon").ok(),
+ url_append: get_bool(&map, "urlAppend").ok(),
};
Ok(record)
@@ -197,31 +200,42 @@ impl TryFrom<xmlrpc::Value> for Record {
/// The records that match a search.
#[derive(Clone, Debug)]
pub struct RecordInfo {
- pub domain_id: i32,
- pub domain_name: String,
- pub domain_type: DomainType,
- pub master_address: String,
- pub last_zone_check: DateTime,
- pub slave_dns: SlaveDns,
- pub soa_serial: String,
- pub records: Vec<Record>,
+ pub domain_id: Option<i32>,
+ pub domain_name: Option<String>,
+ pub domain_type: Option<DomainType>,
+ pub master_address: Option<String>,
+ pub last_zone_check: Option<DateTime>,
+ pub slave_dns: Option<SlaveDns>,
+ pub soa_serial: Option<String>,
+ pub records: Option<Vec<Record>>,
}
impl TryFrom<Response> for RecordInfo {
type Error = Error;
fn try_from(resp: Response) -> Result<Self> {
let info = Self {
- domain_id: get_i32(&resp.data, "roId")?,
- domain_name: get_str(&resp.data, "domain")?,
- domain_type: get_str(&resp.data, "type")?.try_into()?,
- master_address: get_str(&resp.data, "masterIp")?,
- last_zone_check: get_datetime(&resp.data, "lastZoneCheck")?,
- slave_dns: get_map(&resp.data, "slaveDns")?.try_into()?,
- soa_serial: get_str(&resp.data, "SOAserial")?,
- records: get_array(&resp.data, "record")?
- .iter()
- .map(|v| v.to_owned().try_into())
- .collect::<Result<Vec<Record>>>()?,
+ domain_id: get_i32(&resp.data, "roId").ok(),
+ domain_name: get_str(&resp.data, "domain").ok(),
+ domain_type: match get_str(&resp.data, "type").ok() {
+ Some(domain_type) => domain_type.try_into().ok(),
+ None => None,
+ },
+ master_address: get_str(&resp.data, "masterIp").ok(),
+ last_zone_check: get_datetime(&resp.data, "lastZoneCheck").ok(),
+ slave_dns: match get_map(&resp.data, "slaveDns").ok() {
+ Some(slave_dns) => slave_dns.try_into().ok(),
+ None => None,
+ },
+ soa_serial: get_str(&resp.data, "SOAserial").ok(),
+ records: match get_array(&resp.data, "record").ok() {
+ Some(records) => Some(
+ records
+ .iter()
+ .map(|v| v.to_owned().try_into())
+ .collect::<Result<Vec<Record>>>()?,
+ ),
+ None => None,
+ },
};
Ok(info)