X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FCommandLine.hs;fp=src%2FCommandLine.hs;h=1088f2a906a2d2055143f1c0b2036f039fb0155c;hb=a6d2e7470f17b44c0e8fe31c1268488a6788631f;hp=0000000000000000000000000000000000000000;hpb=b749bc258eef9309049fb9c46f1d7143f795abe2;p=email-validator.git diff --git a/src/CommandLine.hs b/src/CommandLine.hs new file mode 100644 index 0000000..1088f2a --- /dev/null +++ b/src/CommandLine.hs @@ -0,0 +1,72 @@ +{-# LANGUAGE DeriveDataTypeable #-} + +module CommandLine +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) + +-- 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. +data Args = Args { input_file :: Maybe FilePath, + output_file :: Maybe FilePath } + deriving (Show, Data, Typeable) + +description :: String +description = "Perform naive validation of email addresses." + +program_name :: String +program_name = "email-validator" + +my_summary :: String +my_summary = program_name ++ "-" ++ (showVersion version) + +input_file_help :: String +input_file_help = + "Path to the input file (default: stdin), one email address per line" + +output_file_help :: String +output_file_help = + "Path to the output file (default: stdout)" + +arg_spec :: Mode (CmdArgs Args) +arg_spec = + cmdArgsMode $ + Args { input_file = def &= typFile &= help input_file_help, + output_file = def &= typFile &= help output_file_help } + &= program program_name + &= 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