X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=haskell-dns.git;a=blobdiff_plain;f=Network%2FDNS%2FNamed%2FZone.hs;fp=Network%2FDNS%2FNamed%2FZone.hs;h=f313beb3d1aab7c78f3b1fd1d0fdf4b920390719;hp=c02ff4b78ec7a4b47f8a048a84e7ac655c26806e;hb=f3ad40fd6916408dde9b9e6237b41828d90c1e34;hpb=845dca95afa7e073e62520ef3c4840b3b078bdad diff --git a/Network/DNS/Named/Zone.hs b/Network/DNS/Named/Zone.hs index c02ff4b..f313beb 100644 --- a/Network/DNS/Named/Zone.hs +++ b/Network/DNS/Named/Zone.hs @@ -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