{-# LANGUAGE DeriveDataTypeable #-} module CommandLine ( Args(..), get_args ) where 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 ) -- We optionally accept input/output files to use instead of -- stdin/stdout. data Args = Args { accept_a :: Bool, input_file :: Maybe FilePath, output_file :: Maybe FilePath, rfc5322 :: Bool } 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) accept_a_help :: String accept_a_help = "Accept an 'A' record for the domain instead of requiring an MX record." 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)" rfc5322_help :: String rfc5322_help = "Validate according to RFC 5322 (incredibly lenient)." arg_spec :: Args arg_spec = Args { accept_a = def &= help accept_a_help, input_file = def &= typFile &= help input_file_help, output_file = def &= typFile &= help output_file_help, rfc5322 = def &= help rfc5322_help } &= program program_name &= summary my_summary &= details [description] get_args :: IO Args get_args = cmdArgs arg_spec