diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2022-10-22 16:56:26 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2022-10-22 16:56:26 +0200 |
commit | cc26d8e46e9b4ddf8f79b837b70aa5c35bac77a7 (patch) | |
tree | cad8c91a66fc540bdedd3e3dd122289169045f8e | |
parent | 2c6db8f62e8143fe565bad79af785d5e7ad043a0 (diff) |
make record response parameters optional according to api docs
-rw-r--r-- | src/response/nameserver.rs | 76 |
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) |