-- | This module facilitates definition of command line interface.
module CLI (
    defaultOutputFilename
  , withFileOrHandle
  ) where

import           System.IO                 (withFile, IOMode(..), Handle)

-- | Default output filname is used, when there is no explicit output file path, or it is "-" (stdout).
defaultOutputFilename :: FilePath
defaultOutputFilename = "JSONTypes.hs"

-- | Generic function for opening file if the filename is not empty nor "-",
--   or using given handle otherwise (probably stdout, stderr, or stdin).
-- TODO: Should it become utility function?
withFileOrHandle :: FilePath -> IOMode -> Handle -> (Handle -> IO r) -> IO r
withFileOrHandle ""   _      handle action =                      action handle
withFileOrHandle "-"  _      handle action =                      action handle
withFileOrHandle name ioMode _      action = withFile name ioMode action