diff options
Diffstat (limited to 'src/response/nameserver.rs')
-rw-r--r-- | src/response/nameserver.rs | 156 |
1 files changed, 2 insertions, 154 deletions
diff --git a/src/response/nameserver.rs b/src/response/nameserver.rs index a6ab226..24e341e 100644 --- a/src/response/nameserver.rs +++ b/src/response/nameserver.rs @@ -1,162 +1,10 @@ use super::Response; -use crate::call::nameserver::RecordType; +use crate::common::nameserver::{DomainType, RecordType, SlaveDns, UrlRdrType}; +use crate::common::*; use crate::{Error, Result}; -use std::collections::BTreeMap; -use std::fmt; - use iso8601::DateTime; -fn get_str(map: &BTreeMap<String, xmlrpc::Value>, key: &'static str) -> Result<String> { - let value = map - .get(key) - .ok_or(Error::Inexistent(key))? - .as_str() - .ok_or_else(|| Error::Type(key, "String", map.get(key).unwrap().clone()))?; - - Ok(value.to_owned()) -} - -fn get_i32(map: &BTreeMap<String, xmlrpc::Value>, key: &'static str) -> Result<i32> { - let value = map - .get(key) - .ok_or(Error::Inexistent(key))? - .as_i32() - .ok_or_else(|| Error::Type(key, "Int", map.get(key).unwrap().clone()))?; - - Ok(value) -} - -fn get_bool(map: &BTreeMap<String, xmlrpc::Value>, key: &'static str) -> Result<bool> { - let value = map - .get(key) - .ok_or(Error::Inexistent(key))? - .as_bool() - .ok_or_else(|| Error::Type(key, "Bool", map.get(key).unwrap().clone()))?; - - Ok(value) -} - -fn get_datetime(map: &BTreeMap<String, xmlrpc::Value>, key: &'static str) -> Result<DateTime> { - let value = map - .get(key) - .ok_or(Error::Inexistent(key))? - .as_datetime() - .ok_or_else(|| Error::Type(key, "DateTime", map.get(key).unwrap().clone()))?; - - Ok(value) -} - -fn get_array( - map: &BTreeMap<String, xmlrpc::Value>, - key: &'static str, -) -> Result<Vec<xmlrpc::Value>> { - let value = map - .get(key) - .ok_or(Error::Inexistent(key))? - .as_array() - .ok_or_else(|| Error::Type(key, "Array", map.get(key).unwrap().clone()))?; - - Ok(value.to_vec()) -} - -fn get_map( - map: &BTreeMap<String, xmlrpc::Value>, - key: &'static str, -) -> Result<BTreeMap<String, xmlrpc::Value>> { - let value = map - .get(key) - .ok_or(Error::Inexistent(key))? - .as_struct() - .ok_or_else(|| Error::Type(key, "Struct", map.get(key).unwrap().clone()))?; - - Ok(value.to_owned()) -} - -/// The domain type. Can be master or slave. -#[derive(Clone, Debug)] -pub enum DomainType { - Master, - Slave, -} - -impl fmt::Display for DomainType { - fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { - fmt.write_str(match self { - Self::Master => "MASTER", - Self::Slave => "SLAVE", - }) - } -} - -impl TryFrom<String> for DomainType { - type Error = Error; - fn try_from(s: String) -> Result<Self> { - match s.as_str() { - "MASTER" => Ok(Self::Master), - "SLAVE" => Ok(Self::Slave), - _ => Err(Error::BadVariant("DomainType", s)), - } - } -} - -/// Information on a slave nameserver. -#[derive(Clone, Debug)] -pub struct SlaveDns { - pub hostname: String, - pub address: String, -} - -impl TryFrom<BTreeMap<String, xmlrpc::Value>> for SlaveDns { - type Error = Error; - fn try_from(map: BTreeMap<String, xmlrpc::Value>) -> Result<Self> { - let slave = Self { - hostname: get_str(&map, "name")?, - address: get_str(&map, "ip")?, - }; - - Ok(slave) - } -} - -/// Type of URL redirect. Can be a HTTP 301, 302 or frame. -#[derive(Clone, Debug)] -pub enum UrlRdrType { - Permanent, - Temporary, - Frame, -} - -impl fmt::Display for UrlRdrType { - fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { - let url_rdr_type = match self { - Self::Permanent => "HEADER301", - Self::Temporary => "HEADER302", - Self::Frame => "FRAME", - }; - - fmt.write_str(url_rdr_type) - } -} - -impl TryFrom<String> for UrlRdrType { - type Error = Error; - fn try_from(s: String) -> Result<Self> { - match s.as_str() { - "HEADER301" => Ok(Self::Permanent), - "HEADER302" => Ok(Self::Temporary), - "FRAME" => Ok(Self::Frame), - _ => Err(Error::BadVariant("UrlRdrType", s)), - } - } -} - -impl From<UrlRdrType> for xmlrpc::Value { - fn from(url_rdr_type: UrlRdrType) -> Self { - url_rdr_type.to_string().into() - } -} - /// A nameserver record. Contains DNS information as well as INWX metadata. #[derive(Clone, Debug)] pub struct Record { |