module Network.DNS.Named.Zone ( Zone(..) , ZoneFinder(..) , isInZone , defaultRootZone ) where import Data.Maybe import Network.DNS.Message import Network.DNS.Named.Responder data Zone = Zone { zoneName :: !DomainName , zoneResponders :: ![SomeResponder] , zoneIsAuthoritative :: !Bool } class ZoneFinder a where findZone :: a -> DomainName -> IO Zone instance ZoneFinder (DomainName -> Zone) where findZone = (return .) instance ZoneFinder (DomainName -> IO Zone) where findZone = id instance ZoneFinder (DomainName -> Maybe Zone) where findZone = ((return . fromMaybe defaultRootZone) .) instance ZoneFinder (DomainName -> IO (Maybe Zone)) where findZone = (fmap (fromMaybe defaultRootZone) .) isInZone :: DomainName -> Zone -> Bool isInZone name zone = zoneName zone `isZoneOf` name defaultRootZone :: Zone defaultRootZone = Zone { zoneName = mkDomainName "." , zoneResponders = [] -- FIXME , zoneIsAuthoritative = False }