+++ /dev/null
-{-# LANGUAGE DeriveDataTypeable #-}
-
--- | A newtype around a list of Strings which represent the feed
--- hosts. This is all to avoid an orphan instance of Configured for
--- [String] if we had defined one in e.g. OptionalConfiguration.
---
--- This was placed under the "TSN" namespace because its Default
--- instance is specific to TSN, even though otherwise it's just a
--- list of strings.
---
-module TSN.FeedHosts
-where
-
--- DC is needed only for the DCT.Configured instance of String.
-import qualified Data.Configurator as DC()
-import qualified Data.Configurator.Types as DCT (
- Configured,
- Value( List ),
- convert )
-import Data.Data (Data)
-import System.Console.CmdArgs.Default (Default(..))
-import Data.Typeable (Typeable)
-
-
--- | A (wrapper around a) list of hostnames that supply the XML feed.
---
-newtype FeedHosts =
- FeedHosts { get_feed_hosts :: [String] }
- deriving (Data, Show, Typeable)
-
-
-instance Default FeedHosts where
- -- | The default list of feed hosts. These were found by checking
- -- PTR records in the neighborhood of the IP address in use. There
- -- is a feed4.sportsnetwork.com, but it was not operational when
- -- this was written.
- def = FeedHosts ["feed1.sportsnetwork.com",
- "feed2.sportsnetwork.com",
- "feed3.sportsnetwork.com"]
-
-
-instance DCT.Configured FeedHosts where
- -- | This allows us to read a FeedHosts object out of a Configurator
- -- config file. By default Configurator wouldn't know what to do,
- -- so we have to tell it that we expect a list, and if that list
- -- has strings in it, we can apply the FeedHosts constructor to
- -- it.
- convert (DCT.List xs) =
- -- mapM gives us a Maybe [String] here.
- fmap FeedHosts (mapM convert_string xs)
- where
- convert_string :: DCT.Value -> Maybe String
- convert_string = DCT.convert
-
- -- If we read anything other than a list of values out of the file,
- -- fail.
- convert _ = Nothing