module Network.DNS.Named.Zone ( Zone(..) , isInZone , zoneSOARecord , zoneNSRecord ) where import Data.Maybe import Network.DNS.Message data Zone = Zone { zoneName :: !DomainName , zoneSOA :: !(Maybe SOAFields) , zoneRecordNames :: !(IO [DomainName]) , zoneResponder :: !(DomainName -> IO [SomeRR]) } isInZone :: DomainName -> Zone -> Bool isInZone name zone = zoneName zone `isZoneOf` name zoneSOARecord :: Zone -> Maybe SomeRR zoneSOARecord zone = do soa <- zoneSOA zone return $ wrapRecord $ ResourceRecord { rrName = zoneName zone , rrType = SOA , rrClass = IN , rrTTL = soaMinimumTTL soa , rrData = soa } zoneNSRecord :: Zone -> Maybe SomeRR zoneNSRecord zone = do soa <- zoneSOA zone return $ wrapRecord $ ResourceRecord { rrName = zoneName zone , rrType = NS , rrClass = IN , rrTTL = soaMinimumTTL soa , rrData = soaMasterNameServer soa }