]> gitweb @ CieloNegro.org - haskell-dns.git/blobdiff - Network/DNS/Named/Zone.hs
ZoneFinder comes back
[haskell-dns.git] / Network / DNS / Named / Zone.hs
index c02ff4b78ec7a4b47f8a048a84e7ac655c26806e..f313beb3d1aab7c78f3b1fd1d0fdf4b920390719 100644 (file)
@@ -1,5 +1,8 @@
 module Network.DNS.Named.Zone
-    ( Zone(..)
+    ( ZoneFinder(..)
+    , fromZones
+
+    , Zone(..)
     , isInZone
 
     , zoneSOARecord
@@ -9,6 +12,29 @@ module Network.DNS.Named.Zone
 
 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