module SMR.CLI.Config where
import qualified System.Exit as System
data Mode
= ModeNone
| ModeCheck FilePath
| ModeREPL (Maybe FilePath)
| ModeConvert FilePath FilePath
deriving Show
data Config
= Config
{ configMode :: Mode }
deriving Show
configZero :: Config
configZero
= Config
{ configMode = ModeNone }
parseArgs :: [String] -> Config -> IO Config
parseArgs [] config
= return config
parseArgs ss config
| "-check" : filePath : ssRest <- ss
= parseArgs ssRest
$ config { configMode = ModeCheck filePath }
| "-convert" : fileSource : fileDest : ssRest <- ss
= parseArgs ssRest
$ config { configMode = ModeConvert fileSource fileDest }
| "-help" : _ssRest <- ss
= do putStr usage
System.exitSuccess
| "--help" : _ssRest <- ss
= do putStr usage
System.exitSuccess
| filePath : ssRest <- ss
, c : _ <- filePath
, c /= '-'
= parseArgs ssRest
$ config { configMode = ModeREPL (Just filePath) }
| otherwise
= do putStr usage
System.exitSuccess
usage :: String
usage
= unlines
[ "shimmer Start the REPL with no soure file."
, "shimmer FILE Start the REPL with the given file."
, "shimmer -help Display this help page."
, "shimmer -check FILE Check that a source file is well formed."
, "shimmer -convert FILE1 FILE2 Convert file from one format to another." ]