{-# LANGUAGE DeriveDataTypeable #-}
-module CommandLine
+module CommandLine (
+ Args(..),
+ get_args )
where
-import System.Console.CmdArgs
-import System.Console.CmdArgs.Explicit (process)
-import System.Environment (getArgs, withArgs)
-import System.Exit (ExitCode(..), exitWith)
-import System.IO (hPutStrLn, stderr)
+import System.Console.CmdArgs (
+ Data,
+ Typeable,
+ (&=),
+ cmdArgs,
+ def,
+ details,
+ help,
+ program,
+ summary,
+ typFile)
+
-- Get the version from Cabal.
import Paths_email_validator (version)
import Data.Version (showVersion)
-import ExitCodes
-- We optionally accept input/output files to use instead of
-- stdin/stdout.
rfc5322_help =
"Validate according to RFC 5322 (incredibly lenient)."
-arg_spec :: Mode (CmdArgs Args)
+arg_spec :: Args
arg_spec =
- cmdArgsMode $
Args { accept_a = def &= help accept_a_help,
input_file = def &= typFile &= help input_file_help,
output_file = def &= typFile &= help output_file_help,
&= summary my_summary
&= details [description]
-show_help :: IO (CmdArgs Args)
-show_help = withArgs ["--help"] parse_args
-
-
-
-parse_args :: IO (CmdArgs Args)
-parse_args = do
- x <- getArgs
- let y = process arg_spec x
- case y of
- Right result -> return result
- Left err -> do
- hPutStrLn stderr err
- exitWith (ExitFailure exit_args_parse_failed)
--- | Really get the command-line arguments. This calls 'parse_args'
--- first to replace the default "wrong number of arguments" error,
--- and then runs 'cmdArgsApply' on the result to do what the
--- 'cmdArgs' function usually does.
-apply_args :: IO Args
-apply_args =
- parse_args >>= cmdArgsApply
+get_args :: IO Args
+get_args = cmdArgs arg_spec
stdout)
-import CommandLine (Args(..), apply_args)
+import CommandLine (Args(..), get_args)
import EmailAddress
import ExitCodes (exit_input_file_doesnt_exist)
main :: IO ()
main = do
- Args{..} <- apply_args
+ Args{..} <- get_args
-- Get the input from either stdin, or the file given on the command
-- line.