module Network.DNS.Named.Zone
- ( Zone(..)
+ ( ZoneFinder(..)
+ , fromZones
+
+ , Zone(..)
, isInZone
, zoneSOARecord
import Data.Maybe
import Network.DNS.Message
+import Network.DNS.DomainMap
+
+
+class ZoneFinder a where
+ findZone :: a -> DomainName -> IO (Maybe Zone)
+
+instance ZoneFinder (DomainMap Zone) where
+ findZone = (return .) . flip nearest
+
+instance ZoneFinder (IO (DomainMap Zone)) where
+ findZone = flip (fmap . nearest)
+
+instance ZoneFinder (DomainName -> Maybe Zone) where
+ findZone = (return .)
+
+instance ZoneFinder (DomainName -> IO (Maybe Zone)) where
+ findZone = id
+
+
+fromZones :: [Zone] -> DomainMap Zone
+fromZones = fromList . map toPair
+ where
+ toPair z = (zoneName z, z)
data Zone