{-# LANGUAGE DeriveDataTypeable, GeneralizedNewtypeDeriving #-}
{-# LANGUAGE FlexibleInstances #-}
module Propellor.Types.Dns where
import Propellor.Types.OS (HostName)
import Propellor.Types.Empty
import Propellor.Types.Info
import Propellor.Types.ConfigurableValue
import Utility.Split
import Data.Word
import qualified Data.Map as M
import qualified Data.Set as S
import qualified Data.Semigroup as Sem
import Data.List
import Data.Monoid
import Prelude
type Domain = String
data IPAddr = IPv4 String | IPv6 String
deriving (ReadPrec [IPAddr]
ReadPrec IPAddr
Int -> ReadS IPAddr
ReadS [IPAddr]
(Int -> ReadS IPAddr)
-> ReadS [IPAddr]
-> ReadPrec IPAddr
-> ReadPrec [IPAddr]
-> Read IPAddr
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS IPAddr
readsPrec :: Int -> ReadS IPAddr
$creadList :: ReadS [IPAddr]
readList :: ReadS [IPAddr]
$creadPrec :: ReadPrec IPAddr
readPrec :: ReadPrec IPAddr
$creadListPrec :: ReadPrec [IPAddr]
readListPrec :: ReadPrec [IPAddr]
Read, Int -> IPAddr -> ShowS
[IPAddr] -> ShowS
IPAddr -> HostName
(Int -> IPAddr -> ShowS)
-> (IPAddr -> HostName) -> ([IPAddr] -> ShowS) -> Show IPAddr
forall a.
(Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> IPAddr -> ShowS
showsPrec :: Int -> IPAddr -> ShowS
$cshow :: IPAddr -> HostName
show :: IPAddr -> HostName
$cshowList :: [IPAddr] -> ShowS
showList :: [IPAddr] -> ShowS
Show, IPAddr -> IPAddr -> Bool
(IPAddr -> IPAddr -> Bool)
-> (IPAddr -> IPAddr -> Bool) -> Eq IPAddr
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: IPAddr -> IPAddr -> Bool
== :: IPAddr -> IPAddr -> Bool
$c/= :: IPAddr -> IPAddr -> Bool
/= :: IPAddr -> IPAddr -> Bool
Eq, Eq IPAddr
Eq IPAddr =>
(IPAddr -> IPAddr -> Ordering)
-> (IPAddr -> IPAddr -> Bool)
-> (IPAddr -> IPAddr -> Bool)
-> (IPAddr -> IPAddr -> Bool)
-> (IPAddr -> IPAddr -> Bool)
-> (IPAddr -> IPAddr -> IPAddr)
-> (IPAddr -> IPAddr -> IPAddr)
-> Ord IPAddr
IPAddr -> IPAddr -> Bool
IPAddr -> IPAddr -> Ordering
IPAddr -> IPAddr -> IPAddr
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: IPAddr -> IPAddr -> Ordering
compare :: IPAddr -> IPAddr -> Ordering
$c< :: IPAddr -> IPAddr -> Bool
< :: IPAddr -> IPAddr -> Bool
$c<= :: IPAddr -> IPAddr -> Bool
<= :: IPAddr -> IPAddr -> Bool
$c> :: IPAddr -> IPAddr -> Bool
> :: IPAddr -> IPAddr -> Bool
$c>= :: IPAddr -> IPAddr -> Bool
>= :: IPAddr -> IPAddr -> Bool
$cmax :: IPAddr -> IPAddr -> IPAddr
max :: IPAddr -> IPAddr -> IPAddr
$cmin :: IPAddr -> IPAddr -> IPAddr
min :: IPAddr -> IPAddr -> IPAddr
Ord)
instance ConfigurableValue IPAddr where
val :: IPAddr -> HostName
val (IPv4 HostName
addr) = HostName
addr
val (IPv6 HostName
addr) = HostName
addr
newtype AliasesInfo = AliasesInfo (S.Set HostName)
deriving (Int -> AliasesInfo -> ShowS
[AliasesInfo] -> ShowS
AliasesInfo -> HostName
(Int -> AliasesInfo -> ShowS)
-> (AliasesInfo -> HostName)
-> ([AliasesInfo] -> ShowS)
-> Show AliasesInfo
forall a.
(Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AliasesInfo -> ShowS
showsPrec :: Int -> AliasesInfo -> ShowS
$cshow :: AliasesInfo -> HostName
show :: AliasesInfo -> HostName
$cshowList :: [AliasesInfo] -> ShowS
showList :: [AliasesInfo] -> ShowS
Show, AliasesInfo -> AliasesInfo -> Bool
(AliasesInfo -> AliasesInfo -> Bool)
-> (AliasesInfo -> AliasesInfo -> Bool) -> Eq AliasesInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AliasesInfo -> AliasesInfo -> Bool
== :: AliasesInfo -> AliasesInfo -> Bool
$c/= :: AliasesInfo -> AliasesInfo -> Bool
/= :: AliasesInfo -> AliasesInfo -> Bool
Eq, Eq AliasesInfo
Eq AliasesInfo =>
(AliasesInfo -> AliasesInfo -> Ordering)
-> (AliasesInfo -> AliasesInfo -> Bool)
-> (AliasesInfo -> AliasesInfo -> Bool)
-> (AliasesInfo -> AliasesInfo -> Bool)
-> (AliasesInfo -> AliasesInfo -> Bool)
-> (AliasesInfo -> AliasesInfo -> AliasesInfo)
-> (AliasesInfo -> AliasesInfo -> AliasesInfo)
-> Ord AliasesInfo
AliasesInfo -> AliasesInfo -> Bool
AliasesInfo -> AliasesInfo -> Ordering
AliasesInfo -> AliasesInfo -> AliasesInfo
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: AliasesInfo -> AliasesInfo -> Ordering
compare :: AliasesInfo -> AliasesInfo -> Ordering
$c< :: AliasesInfo -> AliasesInfo -> Bool
< :: AliasesInfo -> AliasesInfo -> Bool
$c<= :: AliasesInfo -> AliasesInfo -> Bool
<= :: AliasesInfo -> AliasesInfo -> Bool
$c> :: AliasesInfo -> AliasesInfo -> Bool
> :: AliasesInfo -> AliasesInfo -> Bool
$c>= :: AliasesInfo -> AliasesInfo -> Bool
>= :: AliasesInfo -> AliasesInfo -> Bool
$cmax :: AliasesInfo -> AliasesInfo -> AliasesInfo
max :: AliasesInfo -> AliasesInfo -> AliasesInfo
$cmin :: AliasesInfo -> AliasesInfo -> AliasesInfo
min :: AliasesInfo -> AliasesInfo -> AliasesInfo
Ord, NonEmpty AliasesInfo -> AliasesInfo
AliasesInfo -> AliasesInfo -> AliasesInfo
(AliasesInfo -> AliasesInfo -> AliasesInfo)
-> (NonEmpty AliasesInfo -> AliasesInfo)
-> (forall b. Integral b => b -> AliasesInfo -> AliasesInfo)
-> Semigroup AliasesInfo
forall b. Integral b => b -> AliasesInfo -> AliasesInfo
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
$c<> :: AliasesInfo -> AliasesInfo -> AliasesInfo
<> :: AliasesInfo -> AliasesInfo -> AliasesInfo
$csconcat :: NonEmpty AliasesInfo -> AliasesInfo
sconcat :: NonEmpty AliasesInfo -> AliasesInfo
$cstimes :: forall b. Integral b => b -> AliasesInfo -> AliasesInfo
stimes :: forall b. Integral b => b -> AliasesInfo -> AliasesInfo
Sem.Semigroup, Semigroup AliasesInfo
AliasesInfo
Semigroup AliasesInfo =>
AliasesInfo
-> (AliasesInfo -> AliasesInfo -> AliasesInfo)
-> ([AliasesInfo] -> AliasesInfo)
-> Monoid AliasesInfo
[AliasesInfo] -> AliasesInfo
AliasesInfo -> AliasesInfo -> AliasesInfo
forall a.
Semigroup a =>
a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
$cmempty :: AliasesInfo
mempty :: AliasesInfo
$cmappend :: AliasesInfo -> AliasesInfo -> AliasesInfo
mappend :: AliasesInfo -> AliasesInfo -> AliasesInfo
$cmconcat :: [AliasesInfo] -> AliasesInfo
mconcat :: [AliasesInfo] -> AliasesInfo
Monoid, Typeable)
instance IsInfo AliasesInfo where
propagateInfo :: AliasesInfo -> PropagateInfo
propagateInfo AliasesInfo
_ = Bool -> PropagateInfo
PropagateInfo Bool
False
toAliasesInfo :: [HostName] -> AliasesInfo
toAliasesInfo :: [HostName] -> AliasesInfo
toAliasesInfo [HostName]
l = Set HostName -> AliasesInfo
AliasesInfo ([HostName] -> Set HostName
forall a. Ord a => [a] -> Set a
S.fromList [HostName]
l)
fromAliasesInfo :: AliasesInfo -> [HostName]
fromAliasesInfo :: AliasesInfo -> [HostName]
fromAliasesInfo (AliasesInfo Set HostName
s) = Set HostName -> [HostName]
forall a. Set a -> [a]
S.toList Set HostName
s
newtype DnsInfoPropagated = DnsInfoPropagated
{ DnsInfoPropagated -> Set Record
fromDnsInfoPropagated :: S.Set Record }
deriving (Int -> DnsInfoPropagated -> ShowS
[DnsInfoPropagated] -> ShowS
DnsInfoPropagated -> HostName
(Int -> DnsInfoPropagated -> ShowS)
-> (DnsInfoPropagated -> HostName)
-> ([DnsInfoPropagated] -> ShowS)
-> Show DnsInfoPropagated
forall a.
(Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DnsInfoPropagated -> ShowS
showsPrec :: Int -> DnsInfoPropagated -> ShowS
$cshow :: DnsInfoPropagated -> HostName
show :: DnsInfoPropagated -> HostName
$cshowList :: [DnsInfoPropagated] -> ShowS
showList :: [DnsInfoPropagated] -> ShowS
Show, DnsInfoPropagated -> DnsInfoPropagated -> Bool
(DnsInfoPropagated -> DnsInfoPropagated -> Bool)
-> (DnsInfoPropagated -> DnsInfoPropagated -> Bool)
-> Eq DnsInfoPropagated
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DnsInfoPropagated -> DnsInfoPropagated -> Bool
== :: DnsInfoPropagated -> DnsInfoPropagated -> Bool
$c/= :: DnsInfoPropagated -> DnsInfoPropagated -> Bool
/= :: DnsInfoPropagated -> DnsInfoPropagated -> Bool
Eq, Eq DnsInfoPropagated
Eq DnsInfoPropagated =>
(DnsInfoPropagated -> DnsInfoPropagated -> Ordering)
-> (DnsInfoPropagated -> DnsInfoPropagated -> Bool)
-> (DnsInfoPropagated -> DnsInfoPropagated -> Bool)
-> (DnsInfoPropagated -> DnsInfoPropagated -> Bool)
-> (DnsInfoPropagated -> DnsInfoPropagated -> Bool)
-> (DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated)
-> (DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated)
-> Ord DnsInfoPropagated
DnsInfoPropagated -> DnsInfoPropagated -> Bool
DnsInfoPropagated -> DnsInfoPropagated -> Ordering
DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: DnsInfoPropagated -> DnsInfoPropagated -> Ordering
compare :: DnsInfoPropagated -> DnsInfoPropagated -> Ordering
$c< :: DnsInfoPropagated -> DnsInfoPropagated -> Bool
< :: DnsInfoPropagated -> DnsInfoPropagated -> Bool
$c<= :: DnsInfoPropagated -> DnsInfoPropagated -> Bool
<= :: DnsInfoPropagated -> DnsInfoPropagated -> Bool
$c> :: DnsInfoPropagated -> DnsInfoPropagated -> Bool
> :: DnsInfoPropagated -> DnsInfoPropagated -> Bool
$c>= :: DnsInfoPropagated -> DnsInfoPropagated -> Bool
>= :: DnsInfoPropagated -> DnsInfoPropagated -> Bool
$cmax :: DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated
max :: DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated
$cmin :: DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated
min :: DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated
Ord, NonEmpty DnsInfoPropagated -> DnsInfoPropagated
DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated
(DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated)
-> (NonEmpty DnsInfoPropagated -> DnsInfoPropagated)
-> (forall b.
Integral b =>
b -> DnsInfoPropagated -> DnsInfoPropagated)
-> Semigroup DnsInfoPropagated
forall b. Integral b => b -> DnsInfoPropagated -> DnsInfoPropagated
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
$c<> :: DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated
<> :: DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated
$csconcat :: NonEmpty DnsInfoPropagated -> DnsInfoPropagated
sconcat :: NonEmpty DnsInfoPropagated -> DnsInfoPropagated
$cstimes :: forall b. Integral b => b -> DnsInfoPropagated -> DnsInfoPropagated
stimes :: forall b. Integral b => b -> DnsInfoPropagated -> DnsInfoPropagated
Sem.Semigroup, Semigroup DnsInfoPropagated
DnsInfoPropagated
Semigroup DnsInfoPropagated =>
DnsInfoPropagated
-> (DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated)
-> ([DnsInfoPropagated] -> DnsInfoPropagated)
-> Monoid DnsInfoPropagated
[DnsInfoPropagated] -> DnsInfoPropagated
DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated
forall a.
Semigroup a =>
a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
$cmempty :: DnsInfoPropagated
mempty :: DnsInfoPropagated
$cmappend :: DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated
mappend :: DnsInfoPropagated -> DnsInfoPropagated -> DnsInfoPropagated
$cmconcat :: [DnsInfoPropagated] -> DnsInfoPropagated
mconcat :: [DnsInfoPropagated] -> DnsInfoPropagated
Monoid, Typeable)
toDnsInfoPropagated :: S.Set Record -> DnsInfoPropagated
toDnsInfoPropagated :: Set Record -> DnsInfoPropagated
toDnsInfoPropagated = Set Record -> DnsInfoPropagated
DnsInfoPropagated
instance IsInfo DnsInfoPropagated where
propagateInfo :: DnsInfoPropagated -> PropagateInfo
propagateInfo DnsInfoPropagated
_ = Bool -> PropagateInfo
PropagateInfo Bool
True
newtype DnsInfoUnpropagated = DnsInfoUnpropagated
{ DnsInfoUnpropagated -> Set Record
fromDnsInfoUnpropagated :: S.Set Record }
deriving (Int -> DnsInfoUnpropagated -> ShowS
[DnsInfoUnpropagated] -> ShowS
DnsInfoUnpropagated -> HostName
(Int -> DnsInfoUnpropagated -> ShowS)
-> (DnsInfoUnpropagated -> HostName)
-> ([DnsInfoUnpropagated] -> ShowS)
-> Show DnsInfoUnpropagated
forall a.
(Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DnsInfoUnpropagated -> ShowS
showsPrec :: Int -> DnsInfoUnpropagated -> ShowS
$cshow :: DnsInfoUnpropagated -> HostName
show :: DnsInfoUnpropagated -> HostName
$cshowList :: [DnsInfoUnpropagated] -> ShowS
showList :: [DnsInfoUnpropagated] -> ShowS
Show, DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
(DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool)
-> (DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool)
-> Eq DnsInfoUnpropagated
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
== :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
$c/= :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
/= :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
Eq, Eq DnsInfoUnpropagated
Eq DnsInfoUnpropagated =>
(DnsInfoUnpropagated -> DnsInfoUnpropagated -> Ordering)
-> (DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool)
-> (DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool)
-> (DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool)
-> (DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool)
-> (DnsInfoUnpropagated
-> DnsInfoUnpropagated -> DnsInfoUnpropagated)
-> (DnsInfoUnpropagated
-> DnsInfoUnpropagated -> DnsInfoUnpropagated)
-> Ord DnsInfoUnpropagated
DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
DnsInfoUnpropagated -> DnsInfoUnpropagated -> Ordering
DnsInfoUnpropagated -> DnsInfoUnpropagated -> DnsInfoUnpropagated
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Ordering
compare :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Ordering
$c< :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
< :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
$c<= :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
<= :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
$c> :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
> :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
$c>= :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
>= :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> Bool
$cmax :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> DnsInfoUnpropagated
max :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> DnsInfoUnpropagated
$cmin :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> DnsInfoUnpropagated
min :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> DnsInfoUnpropagated
Ord, NonEmpty DnsInfoUnpropagated -> DnsInfoUnpropagated
DnsInfoUnpropagated -> DnsInfoUnpropagated -> DnsInfoUnpropagated
(DnsInfoUnpropagated -> DnsInfoUnpropagated -> DnsInfoUnpropagated)
-> (NonEmpty DnsInfoUnpropagated -> DnsInfoUnpropagated)
-> (forall b.
Integral b =>
b -> DnsInfoUnpropagated -> DnsInfoUnpropagated)
-> Semigroup DnsInfoUnpropagated
forall b.
Integral b =>
b -> DnsInfoUnpropagated -> DnsInfoUnpropagated
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
$c<> :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> DnsInfoUnpropagated
<> :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> DnsInfoUnpropagated
$csconcat :: NonEmpty DnsInfoUnpropagated -> DnsInfoUnpropagated
sconcat :: NonEmpty DnsInfoUnpropagated -> DnsInfoUnpropagated
$cstimes :: forall b.
Integral b =>
b -> DnsInfoUnpropagated -> DnsInfoUnpropagated
stimes :: forall b.
Integral b =>
b -> DnsInfoUnpropagated -> DnsInfoUnpropagated
Sem.Semigroup, Semigroup DnsInfoUnpropagated
DnsInfoUnpropagated
Semigroup DnsInfoUnpropagated =>
DnsInfoUnpropagated
-> (DnsInfoUnpropagated
-> DnsInfoUnpropagated -> DnsInfoUnpropagated)
-> ([DnsInfoUnpropagated] -> DnsInfoUnpropagated)
-> Monoid DnsInfoUnpropagated
[DnsInfoUnpropagated] -> DnsInfoUnpropagated
DnsInfoUnpropagated -> DnsInfoUnpropagated -> DnsInfoUnpropagated
forall a.
Semigroup a =>
a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
$cmempty :: DnsInfoUnpropagated
mempty :: DnsInfoUnpropagated
$cmappend :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> DnsInfoUnpropagated
mappend :: DnsInfoUnpropagated -> DnsInfoUnpropagated -> DnsInfoUnpropagated
$cmconcat :: [DnsInfoUnpropagated] -> DnsInfoUnpropagated
mconcat :: [DnsInfoUnpropagated] -> DnsInfoUnpropagated
Monoid, Typeable)
toDnsInfoUnpropagated :: S.Set Record -> DnsInfoUnpropagated
toDnsInfoUnpropagated :: Set Record -> DnsInfoUnpropagated
toDnsInfoUnpropagated = Set Record -> DnsInfoUnpropagated
DnsInfoUnpropagated
getDnsInfo :: Info -> S.Set Record
getDnsInfo :: Info -> Set Record
getDnsInfo Info
i = DnsInfoUnpropagated -> Set Record
fromDnsInfoUnpropagated (Info -> DnsInfoUnpropagated
forall v. IsInfo v => Info -> v
fromInfo Info
i)
Set Record -> Set Record -> Set Record
forall a. Ord a => Set a -> Set a -> Set a
`S.union` DnsInfoPropagated -> Set Record
fromDnsInfoPropagated (Info -> DnsInfoPropagated
forall v. IsInfo v => Info -> v
fromInfo Info
i)
instance IsInfo DnsInfoUnpropagated where
propagateInfo :: DnsInfoUnpropagated -> PropagateInfo
propagateInfo DnsInfoUnpropagated
_ = Bool -> PropagateInfo
PropagateInfo Bool
False
data NamedConf = NamedConf
{ NamedConf -> HostName
confDomain :: Domain
, NamedConf -> DnsServerType
confDnsServerType :: DnsServerType
, NamedConf -> HostName
confFile :: FilePath
, NamedConf -> [IPAddr]
confMasters :: [IPAddr]
, NamedConf -> [IPAddr]
confAllowTransfer :: [IPAddr]
, NamedConf -> [HostName]
confLines :: [String]
}
deriving (Int -> NamedConf -> ShowS
[NamedConf] -> ShowS
NamedConf -> HostName
(Int -> NamedConf -> ShowS)
-> (NamedConf -> HostName)
-> ([NamedConf] -> ShowS)
-> Show NamedConf
forall a.
(Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NamedConf -> ShowS
showsPrec :: Int -> NamedConf -> ShowS
$cshow :: NamedConf -> HostName
show :: NamedConf -> HostName
$cshowList :: [NamedConf] -> ShowS
showList :: [NamedConf] -> ShowS
Show, NamedConf -> NamedConf -> Bool
(NamedConf -> NamedConf -> Bool)
-> (NamedConf -> NamedConf -> Bool) -> Eq NamedConf
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NamedConf -> NamedConf -> Bool
== :: NamedConf -> NamedConf -> Bool
$c/= :: NamedConf -> NamedConf -> Bool
/= :: NamedConf -> NamedConf -> Bool
Eq, Eq NamedConf
Eq NamedConf =>
(NamedConf -> NamedConf -> Ordering)
-> (NamedConf -> NamedConf -> Bool)
-> (NamedConf -> NamedConf -> Bool)
-> (NamedConf -> NamedConf -> Bool)
-> (NamedConf -> NamedConf -> Bool)
-> (NamedConf -> NamedConf -> NamedConf)
-> (NamedConf -> NamedConf -> NamedConf)
-> Ord NamedConf
NamedConf -> NamedConf -> Bool
NamedConf -> NamedConf -> Ordering
NamedConf -> NamedConf -> NamedConf
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: NamedConf -> NamedConf -> Ordering
compare :: NamedConf -> NamedConf -> Ordering
$c< :: NamedConf -> NamedConf -> Bool
< :: NamedConf -> NamedConf -> Bool
$c<= :: NamedConf -> NamedConf -> Bool
<= :: NamedConf -> NamedConf -> Bool
$c> :: NamedConf -> NamedConf -> Bool
> :: NamedConf -> NamedConf -> Bool
$c>= :: NamedConf -> NamedConf -> Bool
>= :: NamedConf -> NamedConf -> Bool
$cmax :: NamedConf -> NamedConf -> NamedConf
max :: NamedConf -> NamedConf -> NamedConf
$cmin :: NamedConf -> NamedConf -> NamedConf
min :: NamedConf -> NamedConf -> NamedConf
Ord)
data DnsServerType = Master | Secondary
deriving (Int -> DnsServerType -> ShowS
[DnsServerType] -> ShowS
DnsServerType -> HostName
(Int -> DnsServerType -> ShowS)
-> (DnsServerType -> HostName)
-> ([DnsServerType] -> ShowS)
-> Show DnsServerType
forall a.
(Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DnsServerType -> ShowS
showsPrec :: Int -> DnsServerType -> ShowS
$cshow :: DnsServerType -> HostName
show :: DnsServerType -> HostName
$cshowList :: [DnsServerType] -> ShowS
showList :: [DnsServerType] -> ShowS
Show, DnsServerType -> DnsServerType -> Bool
(DnsServerType -> DnsServerType -> Bool)
-> (DnsServerType -> DnsServerType -> Bool) -> Eq DnsServerType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DnsServerType -> DnsServerType -> Bool
== :: DnsServerType -> DnsServerType -> Bool
$c/= :: DnsServerType -> DnsServerType -> Bool
/= :: DnsServerType -> DnsServerType -> Bool
Eq, Eq DnsServerType
Eq DnsServerType =>
(DnsServerType -> DnsServerType -> Ordering)
-> (DnsServerType -> DnsServerType -> Bool)
-> (DnsServerType -> DnsServerType -> Bool)
-> (DnsServerType -> DnsServerType -> Bool)
-> (DnsServerType -> DnsServerType -> Bool)
-> (DnsServerType -> DnsServerType -> DnsServerType)
-> (DnsServerType -> DnsServerType -> DnsServerType)
-> Ord DnsServerType
DnsServerType -> DnsServerType -> Bool
DnsServerType -> DnsServerType -> Ordering
DnsServerType -> DnsServerType -> DnsServerType
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: DnsServerType -> DnsServerType -> Ordering
compare :: DnsServerType -> DnsServerType -> Ordering
$c< :: DnsServerType -> DnsServerType -> Bool
< :: DnsServerType -> DnsServerType -> Bool
$c<= :: DnsServerType -> DnsServerType -> Bool
<= :: DnsServerType -> DnsServerType -> Bool
$c> :: DnsServerType -> DnsServerType -> Bool
> :: DnsServerType -> DnsServerType -> Bool
$c>= :: DnsServerType -> DnsServerType -> Bool
>= :: DnsServerType -> DnsServerType -> Bool
$cmax :: DnsServerType -> DnsServerType -> DnsServerType
max :: DnsServerType -> DnsServerType -> DnsServerType
$cmin :: DnsServerType -> DnsServerType -> DnsServerType
min :: DnsServerType -> DnsServerType -> DnsServerType
Ord)
data Zone = Zone
{ Zone -> HostName
zDomain :: Domain
, Zone -> SOA
zSOA :: SOA
, Zone -> [(BindDomain, Record)]
zHosts :: [(BindDomain, Record)]
}
deriving (ReadPrec [Zone]
ReadPrec Zone
Int -> ReadS Zone
ReadS [Zone]
(Int -> ReadS Zone)
-> ReadS [Zone] -> ReadPrec Zone -> ReadPrec [Zone] -> Read Zone
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Zone
readsPrec :: Int -> ReadS Zone
$creadList :: ReadS [Zone]
readList :: ReadS [Zone]
$creadPrec :: ReadPrec Zone
readPrec :: ReadPrec Zone
$creadListPrec :: ReadPrec [Zone]
readListPrec :: ReadPrec [Zone]
Read, Int -> Zone -> ShowS
[Zone] -> ShowS
Zone -> HostName
(Int -> Zone -> ShowS)
-> (Zone -> HostName) -> ([Zone] -> ShowS) -> Show Zone
forall a.
(Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Zone -> ShowS
showsPrec :: Int -> Zone -> ShowS
$cshow :: Zone -> HostName
show :: Zone -> HostName
$cshowList :: [Zone] -> ShowS
showList :: [Zone] -> ShowS
Show, Zone -> Zone -> Bool
(Zone -> Zone -> Bool) -> (Zone -> Zone -> Bool) -> Eq Zone
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Zone -> Zone -> Bool
== :: Zone -> Zone -> Bool
$c/= :: Zone -> Zone -> Bool
/= :: Zone -> Zone -> Bool
Eq)
data SOA = SOA
{ SOA -> BindDomain
sDomain :: BindDomain
, SOA -> SerialNumber
sSerial :: SerialNumber
, SOA -> Integer
sRefresh :: Integer
, SOA -> Integer
sRetry :: Integer
, SOA -> Integer
sExpire :: Integer
, SOA -> Integer
sNegativeCacheTTL :: Integer
}
deriving (ReadPrec [SOA]
ReadPrec SOA
Int -> ReadS SOA
ReadS [SOA]
(Int -> ReadS SOA)
-> ReadS [SOA] -> ReadPrec SOA -> ReadPrec [SOA] -> Read SOA
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS SOA
readsPrec :: Int -> ReadS SOA
$creadList :: ReadS [SOA]
readList :: ReadS [SOA]
$creadPrec :: ReadPrec SOA
readPrec :: ReadPrec SOA
$creadListPrec :: ReadPrec [SOA]
readListPrec :: ReadPrec [SOA]
Read, Int -> SOA -> ShowS
[SOA] -> ShowS
SOA -> HostName
(Int -> SOA -> ShowS)
-> (SOA -> HostName) -> ([SOA] -> ShowS) -> Show SOA
forall a.
(Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SOA -> ShowS
showsPrec :: Int -> SOA -> ShowS
$cshow :: SOA -> HostName
show :: SOA -> HostName
$cshowList :: [SOA] -> ShowS
showList :: [SOA] -> ShowS
Show, SOA -> SOA -> Bool
(SOA -> SOA -> Bool) -> (SOA -> SOA -> Bool) -> Eq SOA
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SOA -> SOA -> Bool
== :: SOA -> SOA -> Bool
$c/= :: SOA -> SOA -> Bool
/= :: SOA -> SOA -> Bool
Eq)
data Record
= Address IPAddr
| CNAME BindDomain
| MX Int BindDomain
| NS BindDomain
| TXT String
| SRV Word16 Word16 Word16 BindDomain
| SSHFP Int Int String
| INCLUDE FilePath
| PTR ReverseIP
deriving (ReadPrec [Record]
ReadPrec Record
Int -> ReadS Record
ReadS [Record]
(Int -> ReadS Record)
-> ReadS [Record]
-> ReadPrec Record
-> ReadPrec [Record]
-> Read Record
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Record
readsPrec :: Int -> ReadS Record
$creadList :: ReadS [Record]
readList :: ReadS [Record]
$creadPrec :: ReadPrec Record
readPrec :: ReadPrec Record
$creadListPrec :: ReadPrec [Record]
readListPrec :: ReadPrec [Record]
Read, Int -> Record -> ShowS
[Record] -> ShowS
Record -> HostName
(Int -> Record -> ShowS)
-> (Record -> HostName) -> ([Record] -> ShowS) -> Show Record
forall a.
(Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Record -> ShowS
showsPrec :: Int -> Record -> ShowS
$cshow :: Record -> HostName
show :: Record -> HostName
$cshowList :: [Record] -> ShowS
showList :: [Record] -> ShowS
Show, Record -> Record -> Bool
(Record -> Record -> Bool)
-> (Record -> Record -> Bool) -> Eq Record
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Record -> Record -> Bool
== :: Record -> Record -> Bool
$c/= :: Record -> Record -> Bool
/= :: Record -> Record -> Bool
Eq, Eq Record
Eq Record =>
(Record -> Record -> Ordering)
-> (Record -> Record -> Bool)
-> (Record -> Record -> Bool)
-> (Record -> Record -> Bool)
-> (Record -> Record -> Bool)
-> (Record -> Record -> Record)
-> (Record -> Record -> Record)
-> Ord Record
Record -> Record -> Bool
Record -> Record -> Ordering
Record -> Record -> Record
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Record -> Record -> Ordering
compare :: Record -> Record -> Ordering
$c< :: Record -> Record -> Bool
< :: Record -> Record -> Bool
$c<= :: Record -> Record -> Bool
<= :: Record -> Record -> Bool
$c> :: Record -> Record -> Bool
> :: Record -> Record -> Bool
$c>= :: Record -> Record -> Bool
>= :: Record -> Record -> Bool
$cmax :: Record -> Record -> Record
max :: Record -> Record -> Record
$cmin :: Record -> Record -> Record
min :: Record -> Record -> Record
Ord, Typeable)
type ReverseIP = String
reverseIP :: IPAddr -> ReverseIP
reverseIP :: IPAddr -> HostName
reverseIP (IPv4 HostName
addr) = HostName -> [HostName] -> HostName
forall a. [a] -> [[a]] -> [a]
intercalate HostName
"." ([HostName] -> [HostName]
forall a. [a] -> [a]
reverse ([HostName] -> [HostName]) -> [HostName] -> [HostName]
forall a b. (a -> b) -> a -> b
$ Char -> HostName -> [HostName]
forall c. Eq c => c -> [c] -> [[c]]
splitc Char
'.' HostName
addr) HostName -> ShowS
forall a. [a] -> [a] -> [a]
++ HostName
".in-addr.arpa"
reverseIP addr :: IPAddr
addr@(IPv6 HostName
_) = ShowS
forall a. [a] -> [a]
reverse (Char -> ShowS
forall a. a -> [a] -> [a]
intersperse Char
'.' ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ HostName -> HostName -> ShowS
forall a. Eq a => [a] -> [a] -> [a] -> [a]
replace HostName
":" HostName
"" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ IPAddr -> HostName
forall t. ConfigurableValue t => t -> HostName
val (IPAddr -> HostName) -> IPAddr -> HostName
forall a b. (a -> b) -> a -> b
$ IPAddr -> IPAddr
canonicalIP IPAddr
addr) HostName -> ShowS
forall a. [a] -> [a] -> [a]
++ HostName
".ip6.arpa"
canonicalIP :: IPAddr -> IPAddr
canonicalIP :: IPAddr -> IPAddr
canonicalIP (IPv4 HostName
addr) = HostName -> IPAddr
IPv4 HostName
addr
canonicalIP (IPv6 HostName
addr) = HostName -> IPAddr
IPv6 (HostName -> IPAddr) -> HostName -> IPAddr
forall a b. (a -> b) -> a -> b
$ HostName -> [HostName] -> HostName
forall a. [a] -> [[a]] -> [a]
intercalate HostName
":" ([HostName] -> HostName) -> [HostName] -> HostName
forall a b. (a -> b) -> a -> b
$ ShowS -> [HostName] -> [HostName]
forall a b. (a -> b) -> [a] -> [b]
map ShowS
canonicalGroup ([HostName] -> [HostName]) -> [HostName] -> [HostName]
forall a b. (a -> b) -> a -> b
$ Char -> HostName -> [HostName]
forall c. Eq c => c -> [c] -> [[c]]
splitc Char
':' (HostName -> [HostName]) -> HostName -> [HostName]
forall a b. (a -> b) -> a -> b
$ ShowS
replaceImplicitGroups HostName
addr
where
canonicalGroup :: ShowS
canonicalGroup HostName
g
| Int
l Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
4 = Int -> Char -> HostName
forall a. Int -> a -> [a]
replicate (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
l) Char
'0' HostName -> ShowS
forall a. [a] -> [a] -> [a]
++ HostName
g
| Bool
otherwise = ShowS
forall a. HasCallStack => HostName -> a
error ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ HostName
"IPv6 group " HostName -> ShowS
forall a. [a] -> [a] -> [a]
++ HostName
g HostName -> ShowS
forall a. [a] -> [a] -> [a]
++ HostName
"as more than 4 hex digits"
where
l :: Int
l = HostName -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length HostName
g
emptyGroups :: Int -> HostName
emptyGroups Int
n = ShowS -> HostName -> [HostName]
forall a. (a -> a) -> a -> [a]
iterate (HostName -> ShowS
forall a. [a] -> [a] -> [a]
++ HostName
":") HostName
"" [HostName] -> Int -> HostName
forall a. HasCallStack => [a] -> Int -> a
!! Int
n
numberOfImplicitGroups :: HostName -> Int
numberOfImplicitGroups HostName
a = Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
- [HostName] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (Char -> HostName -> [HostName]
forall c. Eq c => c -> [c] -> [[c]]
splitc Char
':' (HostName -> [HostName]) -> HostName -> [HostName]
forall a b. (a -> b) -> a -> b
$ HostName -> HostName -> ShowS
forall a. Eq a => [a] -> [a] -> [a] -> [a]
replace HostName
"::" HostName
"" HostName
a)
replaceImplicitGroups :: ShowS
replaceImplicitGroups HostName
a = [HostName] -> HostName
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([HostName] -> HostName) -> [HostName] -> HostName
forall a b. (a -> b) -> a -> b
$ [HostName] -> [HostName]
aux ([HostName] -> [HostName]) -> [HostName] -> [HostName]
forall a b. (a -> b) -> a -> b
$ HostName -> HostName -> [HostName]
forall a. Eq a => [a] -> [a] -> [[a]]
split HostName
"::" HostName
a
where
aux :: [HostName] -> [HostName]
aux [] = []
aux (HostName
x : [HostName]
xs) = HostName
x HostName -> [HostName] -> [HostName]
forall a. a -> [a] -> [a]
: Int -> HostName
emptyGroups (HostName -> Int
numberOfImplicitGroups HostName
a) HostName -> [HostName] -> [HostName]
forall a. a -> [a] -> [a]
: [HostName]
xs
getIPAddr :: Record -> Maybe IPAddr
getIPAddr :: Record -> Maybe IPAddr
getIPAddr (Address IPAddr
addr) = IPAddr -> Maybe IPAddr
forall a. a -> Maybe a
Just IPAddr
addr
getIPAddr Record
_ = Maybe IPAddr
forall a. Maybe a
Nothing
getCNAME :: Record -> Maybe BindDomain
getCNAME :: Record -> Maybe BindDomain
getCNAME (CNAME BindDomain
d) = BindDomain -> Maybe BindDomain
forall a. a -> Maybe a
Just BindDomain
d
getCNAME Record
_ = Maybe BindDomain
forall a. Maybe a
Nothing
getNS :: Record -> Maybe BindDomain
getNS :: Record -> Maybe BindDomain
getNS (NS BindDomain
d) = BindDomain -> Maybe BindDomain
forall a. a -> Maybe a
Just BindDomain
d
getNS Record
_ = Maybe BindDomain
forall a. Maybe a
Nothing
type SerialNumber = Word32
data BindDomain = RelDomain Domain | AbsDomain Domain | RootDomain
deriving (ReadPrec [BindDomain]
ReadPrec BindDomain
Int -> ReadS BindDomain
ReadS [BindDomain]
(Int -> ReadS BindDomain)
-> ReadS [BindDomain]
-> ReadPrec BindDomain
-> ReadPrec [BindDomain]
-> Read BindDomain
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS BindDomain
readsPrec :: Int -> ReadS BindDomain
$creadList :: ReadS [BindDomain]
readList :: ReadS [BindDomain]
$creadPrec :: ReadPrec BindDomain
readPrec :: ReadPrec BindDomain
$creadListPrec :: ReadPrec [BindDomain]
readListPrec :: ReadPrec [BindDomain]
Read, Int -> BindDomain -> ShowS
[BindDomain] -> ShowS
BindDomain -> HostName
(Int -> BindDomain -> ShowS)
-> (BindDomain -> HostName)
-> ([BindDomain] -> ShowS)
-> Show BindDomain
forall a.
(Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> BindDomain -> ShowS
showsPrec :: Int -> BindDomain -> ShowS
$cshow :: BindDomain -> HostName
show :: BindDomain -> HostName
$cshowList :: [BindDomain] -> ShowS
showList :: [BindDomain] -> ShowS
Show, BindDomain -> BindDomain -> Bool
(BindDomain -> BindDomain -> Bool)
-> (BindDomain -> BindDomain -> Bool) -> Eq BindDomain
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: BindDomain -> BindDomain -> Bool
== :: BindDomain -> BindDomain -> Bool
$c/= :: BindDomain -> BindDomain -> Bool
/= :: BindDomain -> BindDomain -> Bool
Eq, Eq BindDomain
Eq BindDomain =>
(BindDomain -> BindDomain -> Ordering)
-> (BindDomain -> BindDomain -> Bool)
-> (BindDomain -> BindDomain -> Bool)
-> (BindDomain -> BindDomain -> Bool)
-> (BindDomain -> BindDomain -> Bool)
-> (BindDomain -> BindDomain -> BindDomain)
-> (BindDomain -> BindDomain -> BindDomain)
-> Ord BindDomain
BindDomain -> BindDomain -> Bool
BindDomain -> BindDomain -> Ordering
BindDomain -> BindDomain -> BindDomain
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: BindDomain -> BindDomain -> Ordering
compare :: BindDomain -> BindDomain -> Ordering
$c< :: BindDomain -> BindDomain -> Bool
< :: BindDomain -> BindDomain -> Bool
$c<= :: BindDomain -> BindDomain -> Bool
<= :: BindDomain -> BindDomain -> Bool
$c> :: BindDomain -> BindDomain -> Bool
> :: BindDomain -> BindDomain -> Bool
$c>= :: BindDomain -> BindDomain -> Bool
>= :: BindDomain -> BindDomain -> Bool
$cmax :: BindDomain -> BindDomain -> BindDomain
max :: BindDomain -> BindDomain -> BindDomain
$cmin :: BindDomain -> BindDomain -> BindDomain
min :: BindDomain -> BindDomain -> BindDomain
Ord)
domainHostName :: BindDomain -> Maybe HostName
domainHostName :: BindDomain -> Maybe HostName
domainHostName (RelDomain HostName
d) = HostName -> Maybe HostName
forall a. a -> Maybe a
Just HostName
d
domainHostName (AbsDomain HostName
d) = HostName -> Maybe HostName
forall a. a -> Maybe a
Just HostName
d
domainHostName BindDomain
RootDomain = Maybe HostName
forall a. Maybe a
Nothing
newtype NamedConfMap = NamedConfMap (M.Map Domain NamedConf)
deriving (NamedConfMap -> NamedConfMap -> Bool
(NamedConfMap -> NamedConfMap -> Bool)
-> (NamedConfMap -> NamedConfMap -> Bool) -> Eq NamedConfMap
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NamedConfMap -> NamedConfMap -> Bool
== :: NamedConfMap -> NamedConfMap -> Bool
$c/= :: NamedConfMap -> NamedConfMap -> Bool
/= :: NamedConfMap -> NamedConfMap -> Bool
Eq, Eq NamedConfMap
Eq NamedConfMap =>
(NamedConfMap -> NamedConfMap -> Ordering)
-> (NamedConfMap -> NamedConfMap -> Bool)
-> (NamedConfMap -> NamedConfMap -> Bool)
-> (NamedConfMap -> NamedConfMap -> Bool)
-> (NamedConfMap -> NamedConfMap -> Bool)
-> (NamedConfMap -> NamedConfMap -> NamedConfMap)
-> (NamedConfMap -> NamedConfMap -> NamedConfMap)
-> Ord NamedConfMap
NamedConfMap -> NamedConfMap -> Bool
NamedConfMap -> NamedConfMap -> Ordering
NamedConfMap -> NamedConfMap -> NamedConfMap
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: NamedConfMap -> NamedConfMap -> Ordering
compare :: NamedConfMap -> NamedConfMap -> Ordering
$c< :: NamedConfMap -> NamedConfMap -> Bool
< :: NamedConfMap -> NamedConfMap -> Bool
$c<= :: NamedConfMap -> NamedConfMap -> Bool
<= :: NamedConfMap -> NamedConfMap -> Bool
$c> :: NamedConfMap -> NamedConfMap -> Bool
> :: NamedConfMap -> NamedConfMap -> Bool
$c>= :: NamedConfMap -> NamedConfMap -> Bool
>= :: NamedConfMap -> NamedConfMap -> Bool
$cmax :: NamedConfMap -> NamedConfMap -> NamedConfMap
max :: NamedConfMap -> NamedConfMap -> NamedConfMap
$cmin :: NamedConfMap -> NamedConfMap -> NamedConfMap
min :: NamedConfMap -> NamedConfMap -> NamedConfMap
Ord, Int -> NamedConfMap -> ShowS
[NamedConfMap] -> ShowS
NamedConfMap -> HostName
(Int -> NamedConfMap -> ShowS)
-> (NamedConfMap -> HostName)
-> ([NamedConfMap] -> ShowS)
-> Show NamedConfMap
forall a.
(Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NamedConfMap -> ShowS
showsPrec :: Int -> NamedConfMap -> ShowS
$cshow :: NamedConfMap -> HostName
show :: NamedConfMap -> HostName
$cshowList :: [NamedConfMap] -> ShowS
showList :: [NamedConfMap] -> ShowS
Show, Typeable)
instance IsInfo NamedConfMap where
propagateInfo :: NamedConfMap -> PropagateInfo
propagateInfo NamedConfMap
_ = Bool -> PropagateInfo
PropagateInfo Bool
False
instance Sem.Semigroup NamedConfMap where
NamedConfMap Map HostName NamedConf
old <> :: NamedConfMap -> NamedConfMap -> NamedConfMap
<> NamedConfMap Map HostName NamedConf
new = Map HostName NamedConf -> NamedConfMap
NamedConfMap (Map HostName NamedConf -> NamedConfMap)
-> Map HostName NamedConf -> NamedConfMap
forall a b. (a -> b) -> a -> b
$
(NamedConf -> NamedConf -> NamedConf)
-> Map HostName NamedConf
-> Map HostName NamedConf
-> Map HostName NamedConf
forall k a. Ord k => (a -> a -> a) -> Map k a -> Map k a -> Map k a
M.unionWith NamedConf -> NamedConf -> NamedConf
combiner Map HostName NamedConf
new Map HostName NamedConf
old
where
combiner :: NamedConf -> NamedConf -> NamedConf
combiner NamedConf
n NamedConf
o = case (NamedConf -> DnsServerType
confDnsServerType NamedConf
n, NamedConf -> DnsServerType
confDnsServerType NamedConf
o) of
(DnsServerType
Secondary, DnsServerType
Master) -> NamedConf
o
(DnsServerType, DnsServerType)
_ -> NamedConf
n
instance Monoid NamedConfMap where
mempty :: NamedConfMap
mempty = Map HostName NamedConf -> NamedConfMap
NamedConfMap Map HostName NamedConf
forall k a. Map k a
M.empty
mappend :: NamedConfMap -> NamedConfMap -> NamedConfMap
mappend = NamedConfMap -> NamedConfMap -> NamedConfMap
forall a. Semigroup a => a -> a -> a
(Sem.<>)
instance Empty NamedConfMap where
isEmpty :: NamedConfMap -> Bool
isEmpty (NamedConfMap Map HostName NamedConf
m) = Map HostName NamedConf -> Bool
forall t. Empty t => t -> Bool
isEmpty Map HostName NamedConf
m
fromNamedConfMap :: NamedConfMap -> M.Map Domain NamedConf
fromNamedConfMap :: NamedConfMap -> Map HostName NamedConf
fromNamedConfMap (NamedConfMap Map HostName NamedConf
m) = Map HostName NamedConf
m