rattletrap-14.1.4: src/lib/Rattletrap/Console/Config.hs
module Rattletrap.Console.Config where
import qualified Rattletrap.Console.Flag as Flag
import qualified Rattletrap.Console.Mode as Mode
import qualified System.FilePath as FilePath
data Config = Config
{ compact :: Bool,
fast :: Bool,
help :: Bool,
input :: Maybe String,
mode :: Maybe Mode.Mode,
output :: Maybe String,
schema :: Bool,
skipCrc :: Bool,
version :: Bool
}
deriving (Eq, Show)
initial :: Config
initial =
Config
{ compact = False,
fast = False,
help = False,
input = Nothing,
mode = Nothing,
output = Nothing,
schema = False,
skipCrc = False,
version = False
}
applyFlag :: Config -> Flag.Flag -> Either String Config
applyFlag config flag = case flag of
Flag.Compact -> Right config {compact = True}
Flag.Fast -> Right config {fast = True}
Flag.Help -> Right config {help = True}
Flag.Input x -> Right config {input = Just x}
Flag.Mode x -> do
y <- Mode.fromString x
Right config {mode = Just y}
Flag.Output x -> Right config {output = Just x}
Flag.Schema -> Right config {schema = True}
Flag.SkipCrc -> Right config {skipCrc = True}
Flag.Version -> Right config {version = True}
getMode :: Config -> Mode.Mode
getMode config =
let i = fmap FilePath.takeExtension $ input config
o = fmap FilePath.takeExtension $ output config
in case (i, o) of
(Just ".json", _) -> Mode.Encode
(Just ".replay", _) -> Mode.Decode
(_, Just ".json") -> Mode.Decode
(_, Just ".replay") -> Mode.Encode
_ -> Mode.Decode