{-# LANGUAGE DeriveDataTypeable #-} module CommandLine ( Args(..), get_args ) where import System.Console.CmdArgs -- Get the version from Cabal. import Paths_haeres (version) import Data.Version (showVersion) ns_description :: String ns_description = "Confirm delegation of NS records. " ++ "This is the default mode." mx_description :: String mx_description = "Confirm delegation of MX records." program_name :: String program_name = "haeres" my_summary :: String my_summary = program_name ++ "-" ++ (showVersion version) server_help :: String server_help = "IP address of server to query " ++ "(will use resolv.conf if not specified)" data Args = NS { server :: Maybe String, delegates :: [String] } | MX { server :: Maybe String, delegates :: [String] } deriving (Data, Show, Typeable) arg_spec :: Args arg_spec = modes [ns &= auto, mx] &= program program_name &= summary my_summary &= helpArg [explicit, name "help", name "h", groupname "Common flags"] &= versionArg [explicit, name "version", name "v", groupname "Common flags"] where -- The repetition here is necessary, some Template Haskell magic -- going on. ns :: Args ns = NS { server = def &= groupname "Common flags" &= typ "IP" &= help server_help, delegates = def &= args &= typ "DELEGATES" } &= details [ns_description] mx :: Args mx = MX { server = def &= groupname "Common flags" &= typ "IP" &= help server_help, delegates = def &= args &= typ "DELEGATES" } &= details [mx_description] get_args :: IO Args get_args = cmdArgs arg_spec