]> gitweb.michael.orlitzky.com - email-validator.git/commitdiff
Remove the "--input" and "--output" command-line flags.
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 8 Mar 2019 22:06:24 +0000 (17:06 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Fri, 8 Mar 2019 22:06:24 +0000 (17:06 -0500)
You should know how to use stdin and stdout. These flags are
redundant, and over-complicate the code.

email-validator.cabal
src/CommandLine.hs
src/ExitCodes.hs [deleted file]
src/Main.hs

index 451a09bd11436986a03a83492749bae04a030d91..9bdbfef1c0d68c6cca01ed9c635cebf0a7d090e0 100644 (file)
@@ -52,7 +52,6 @@ executable email-validator
     base                        < 5,
     bytestring                  >= 0.10,
     cmdargs                     >= 0.10,
-    directory                   >= 1.2,
     dns                         >= 2,
     email-validate              >= 2,
     HUnit                       >= 1.2,
@@ -70,7 +69,6 @@ executable email-validator
   other-modules:
     CommandLine
     EmailAddress
-    ExitCodes
     Paths_email_validator
 
   ghc-options:
@@ -95,7 +93,6 @@ test-suite testsuite
     base                        < 5,
     bytestring                  >= 0.10,
     cmdargs                     >= 0.10,
-    directory                   >= 1.2,
     dns                         >= 2,
     email-validate              >= 2,
     HUnit                       >= 1.2,
index 787cc1992f3d0a1c8099a8048d833396698e76af..e76fedd94efb096eaadd545bec579b1cb9eed9ac 100644 (file)
@@ -13,8 +13,7 @@ import System.Console.CmdArgs (
   details,
   help,
   program,
-  summary,
-  typFile )
+  summary )
 
 
 -- Get the version from Cabal.
@@ -22,11 +21,7 @@ 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)
 
@@ -43,14 +38,6 @@ 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)."
@@ -58,8 +45,6 @@ rfc5322_help =
 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
diff --git a/src/ExitCodes.hs b/src/ExitCodes.hs
deleted file mode 100644 (file)
index 15a1160..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
--- | All exit codes that the program can return (excepting
---   ExitSuccess). There's only one, since the program will try and
---   fail forever upon errors.
-module ExitCodes (
-  exit_args_parse_failed,
-  exit_input_file_doesnt_exist )
-where
-
--- | Indicates that the command-line arguments could not be parsed.
-exit_args_parse_failed :: Int
-exit_args_parse_failed = 1
-
--- | Indicates that the input file given on the command-line does not
---   exist.
-exit_input_file_doesnt_exist :: Int
-exit_input_file_doesnt_exist = 2
index 1393d4c0d41aee7983100fd1125975b59d97ec18..1cc4c73aa47d963e56f30a7188f05781f010b76c 100644 (file)
@@ -7,14 +7,12 @@ where
 import Control.Concurrent.ParallelIO.Global (
    parallelInterleaved,
    stopGlobalPool )
-import Control.Monad ( unless )
 import qualified Data.ByteString.Char8 as BS (
   hGetContents,
   hPutStrLn,
   lines,
   null,
-  pack,
-  readFile )
+  pack )
 import Network.DNS (
   Domain,
   Resolver,
@@ -23,25 +21,19 @@ import Network.DNS (
   makeResolvSeed,
   withResolver )
 import Network.DNS.Lookup ( lookupA, lookupMX )
-import System.Directory ( doesFileExist )
-import System.Exit ( exitWith, ExitCode( ExitFailure ) )
 import System.IO (
-  IOMode( WriteMode ),
-  hClose,
   hFlush,
-  openFile,
   stdin,
   stdout )
 
 
 import CommandLine (
-  Args( Args, accept_a, input_file, output_file, rfc5322 ),
+  Args( Args, accept_a, rfc5322 ),
   get_args )
 import EmailAddress(
   Address,
   parts,
   validate_syntax )
-import ExitCodes ( exit_input_file_doesnt_exist )
 
 
 -- | Resolver parameters. We increase the default timeout from 3 to 10
@@ -110,22 +102,8 @@ main :: IO ()
 main = do
   Args{..} <- get_args
 
-  -- Get the input from either stdin, or the file given on the command
-  -- line.
-  input <- case input_file of
-             Nothing   -> BS.hGetContents stdin
-             Just path -> do
-               is_file <- doesFileExist path
-               unless is_file $
-                 exitWith (ExitFailure exit_input_file_doesnt_exist)
-               BS.readFile path
-
-  -- Do the same for the output handle and stdout.
-  output_handle <- case output_file of
-                     Nothing -> return stdout
-                     Just path -> openFile path WriteMode
-
-  -- Split the input into lines.
+  -- Split stdin into lines, which should result in a list of addresses.
+  input <- BS.hGetContents stdin
   let addresses = BS.lines input
 
   -- And remove the empty ones.
@@ -147,10 +125,7 @@ main = do
 
   -- Output the results.
   let valid_addresses = map fst valid_results
-  mapM_ (BS.hPutStrLn output_handle) valid_addresses
+  mapM_ (BS.hPutStrLn stdout) valid_addresses
 
   stopGlobalPool
-
-  -- Clean up. It's safe to try to close stdout.
-  hFlush output_handle
-  hClose output_handle
+  hFlush stdout