X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FConfiguration.hs;h=7e15a74a15926e745ab7da640d6a3745220fdb93;hb=HEAD;hp=2fbc3979820497aa2bcd2539e6dd5f9e0f4e3ec7;hpb=72482968102ebd7ad0abeef958fed2a02a126dd2;p=mailbox-count.git diff --git a/src/Configuration.hs b/src/Configuration.hs index 2fbc397..9b7be96 100644 --- a/src/Configuration.hs +++ b/src/Configuration.hs @@ -7,50 +7,68 @@ module Configuration ( merge_optional ) where -import System.Console.CmdArgs.Default ( Default(..) ) +import System.Console.CmdArgs.Default ( Default( def ) ) -import qualified OptionalConfiguration as OC ( OptionalConfiguration(..) ) +import qualified OptionalConfiguration as OC ( + OptionalConfiguration(..), + merge_maybes ) -- | The main configuration data type. This will be passed to most of -- the important functions once it has been created. +-- data Configuration = Configuration { - both :: Bool, - database :: String, + database :: Maybe String, detail :: Bool, - host :: String, - password :: String, - port :: Int, - username :: String } + detail_query :: String, + host :: Maybe String, + password :: Maybe String, + port :: Maybe Int, + summary_query :: String, + username :: Maybe String } deriving (Show) + -- | A Configuration with all of its fields set to their default -- values. +-- instance Default Configuration where def = Configuration { - both = def, - database = "postfixadmin", + database = def, detail = def, - host = "localhost", + detail_query = def_detail_query, + host = def, password = def, - port = 5432, - username = "postgres" } + port = def, + summary_query = def_summary_query, + username = def } + where + def_summary_query = "SELECT domain,COUNT(username) " ++ + "FROM mailbox " ++ + "GROUP BY domain " ++ + "ORDER BY domain;" + + def_detail_query = "SELECT domain,username " ++ + "FROM mailbox " ++ + "ORDER BY domain;" -- | Merge a 'Configuration' with an 'OptionalConfiguration'. This is -- more or less the Monoid instance for 'OptionalConfiguration', but -- since the two types are different, we have to repeat ourselves. +-- merge_optional :: Configuration -> OC.OptionalConfiguration -> Configuration merge_optional cfg opt_cfg = Configuration - (merge (both cfg) (OC.both opt_cfg)) - (merge (database cfg) (OC.database opt_cfg)) + (OC.merge_maybes (database cfg) (OC.database opt_cfg)) (merge (detail cfg) (OC.detail opt_cfg)) - (merge (host cfg) (OC.host opt_cfg)) - (merge (password cfg) (OC.password opt_cfg)) - (merge (port cfg) (OC.port opt_cfg)) - (merge (username cfg) (OC.username opt_cfg)) + (merge (detail_query cfg) (OC.detail_query opt_cfg)) + (OC.merge_maybes (host cfg) (OC.host opt_cfg)) + (OC.merge_maybes (password cfg) (OC.password opt_cfg)) + (OC.merge_maybes (port cfg) (OC.port opt_cfg)) + (merge (summary_query cfg) (OC.summary_query opt_cfg)) + (OC.merge_maybes (username cfg) (OC.username opt_cfg)) where -- | If the thing on the right is Just something, return that -- something, otherwise return the thing on the left.