module Rattletrap.Main where
import Rattletrap.Helper
import Rattletrap.Version
import qualified Data.ByteString.Lazy as ByteString
import qualified Data.Version as Version
import qualified System.Environment as Environment
main :: IO ()
main = do
args <- Environment.getArgs
mainWithArgs args
mainWithArgs :: [String] -> IO ()
mainWithArgs args =
case args of
["version"] -> putStrLn (Version.showVersion version)
action:files -> do
(getInput, putOutput) <- getIO files
input <- getInput
output <-
case action of
"decode" ->
case decodeReplay input of
Left message -> fail message
Right replay -> pure (encodeJson replay)
"encode" ->
case decodeJson input of
Left message -> fail message
Right replay -> pure (encodeReplay replay)
_ -> fail ("unknown action: " ++ show action)
putOutput output
_ -> fail ("unknown arguments: " ++ show args)
getIO :: [FilePath]
-> IO (IO ByteString.ByteString, ByteString.ByteString -> IO ())
getIO files =
case files of
[] -> pure (ByteString.getContents, ByteString.putStr)
[i] -> pure (ByteString.readFile i, ByteString.putStr)
[i, o] -> pure (ByteString.readFile i, ByteString.writeFile o)
_ -> fail ("unknown files: " ++ show files)