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