-- | This module defines the 'Cfg' type, which is just a wrapper -- around all of the configuration options we accept on the command -- line. We thread this throughout the rest of the program. -- module Configuration ( Cfg(..), default_config, merge_optional ) where import qualified OptionalConfiguration as OC ( OptionalCfg(..) ) import Usernames ( Usernames(..) ) data Cfg = Cfg { consumer_key :: String, consumer_secret :: String, access_token :: String, access_secret :: String, heartbeat :: Int, ignore_replies :: Bool, ignore_retweets :: Bool, sendmail_path :: String, from_address :: Maybe String, to_address :: Maybe String, verbose :: Bool, usernames :: Usernames } deriving (Show) default_config :: Cfg default_config = Cfg { consumer_key = "", consumer_secret = "", access_token = "", access_secret = "", heartbeat = 600, ignore_replies = False, ignore_retweets = False, sendmail_path = "/usr/sbin/sendmail", from_address = Nothing, to_address = Nothing, verbose = False, usernames = Usernames [] } merge_optional :: Cfg -> OC.OptionalCfg -> Cfg merge_optional cfg opt_cfg = Cfg (merge (consumer_key cfg) (OC.consumer_key opt_cfg)) (merge (consumer_secret cfg) (OC.consumer_secret opt_cfg)) (merge (access_token cfg) (OC.access_token opt_cfg)) (merge (access_secret cfg) (OC.access_secret opt_cfg)) (merge (heartbeat cfg) (OC.heartbeat opt_cfg)) (merge (ignore_replies cfg) (OC.ignore_replies opt_cfg)) (merge (ignore_retweets cfg) (OC.ignore_retweets opt_cfg)) (merge (sendmail_path cfg) (OC.sendmail_path opt_cfg)) (merge' (from_address cfg) (OC.from_address opt_cfg)) (merge' (to_address cfg) (OC.to_address opt_cfg)) (merge (verbose cfg) (OC.verbose opt_cfg)) all_usernames where merge :: a -> Maybe a -> a merge x Nothing = x merge _ (Just y) = y -- Used for the to/from address merge' :: Maybe a -> Maybe a -> Maybe a merge' Nothing Nothing = Nothing merge' (Just x) Nothing = Just x merge' Nothing (Just x) = Just x merge' (Just _) (Just y) = Just y -- If there are any optional usernames, use only those. all_usernames = if (null (get_usernames (OC.usernames opt_cfg))) then (usernames cfg) else (OC.usernames opt_cfg)