aboutsummaryrefslogtreecommitdiff
path: root/src/response/nameserver.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/response/nameserver.rs')
-rw-r--r--src/response/nameserver.rs156
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 {