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 { Config -> Bool compact :: Bool, Config -> Bool fast :: Bool, Config -> Bool help :: Bool, Config -> Maybe String input :: Maybe String, Config -> Maybe Mode mode :: Maybe Mode.Mode, Config -> Maybe String output :: Maybe String, Config -> Bool schema :: Bool, Config -> Bool skipCrc :: Bool, Config -> Bool version :: Bool } deriving (Config -> Config -> Bool (Config -> Config -> Bool) -> (Config -> Config -> Bool) -> Eq Config forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Config -> Config -> Bool == :: Config -> Config -> Bool $c/= :: Config -> Config -> Bool /= :: Config -> Config -> Bool Eq, Int -> Config -> ShowS [Config] -> ShowS Config -> String (Int -> Config -> ShowS) -> (Config -> String) -> ([Config] -> ShowS) -> Show Config forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> Config -> ShowS showsPrec :: Int -> Config -> ShowS $cshow :: Config -> String show :: Config -> String $cshowList :: [Config] -> ShowS showList :: [Config] -> ShowS Show) initial :: Config initial :: Config initial = Config { compact :: Bool compact = Bool False, fast :: Bool fast = Bool False, help :: Bool help = Bool False, input :: Maybe String input = Maybe String forall a. Maybe a Nothing, mode :: Maybe Mode mode = Maybe Mode forall a. Maybe a Nothing, output :: Maybe String output = Maybe String forall a. Maybe a Nothing, schema :: Bool schema = Bool False, skipCrc :: Bool skipCrc = Bool False, version :: Bool version = Bool False } applyFlag :: Config -> Flag.Flag -> Either String Config applyFlag :: Config -> Flag -> Either String Config applyFlag Config config Flag flag = case Flag flag of Flag Flag.Compact -> Config -> Either String Config forall a b. b -> Either a b Right Config config {compact = True} Flag Flag.Fast -> Config -> Either String Config forall a b. b -> Either a b Right Config config {fast = True} Flag Flag.Help -> Config -> Either String Config forall a b. b -> Either a b Right Config config {help = True} Flag.Input String x -> Config -> Either String Config forall a b. b -> Either a b Right Config config {input = Just x} Flag.Mode String x -> do Mode y <- String -> Either String Mode Mode.fromString String x Config -> Either String Config forall a b. b -> Either a b Right Config config {mode = Just y} Flag.Output String x -> Config -> Either String Config forall a b. b -> Either a b Right Config config {output = Just x} Flag Flag.Schema -> Config -> Either String Config forall a b. b -> Either a b Right Config config {schema = True} Flag Flag.SkipCrc -> Config -> Either String Config forall a b. b -> Either a b Right Config config {skipCrc = True} Flag Flag.Version -> Config -> Either String Config forall a b. b -> Either a b Right Config config {version = True} getMode :: Config -> Mode.Mode getMode :: Config -> Mode getMode Config config = let i :: Maybe String i = ShowS -> Maybe String -> Maybe String forall a b. (a -> b) -> Maybe a -> Maybe b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap ShowS FilePath.takeExtension (Maybe String -> Maybe String) -> Maybe String -> Maybe String forall a b. (a -> b) -> a -> b $ Config -> Maybe String input Config config o :: Maybe String o = ShowS -> Maybe String -> Maybe String forall a b. (a -> b) -> Maybe a -> Maybe b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap ShowS FilePath.takeExtension (Maybe String -> Maybe String) -> Maybe String -> Maybe String forall a b. (a -> b) -> a -> b $ Config -> Maybe String output Config config in case (Maybe String i, Maybe String o) of (Just String ".json", Maybe String _) -> Mode Mode.Encode (Just String ".replay", Maybe String _) -> Mode Mode.Decode (Maybe String _, Just String ".json") -> Mode Mode.Decode (Maybe String _, Just String ".replay") -> Mode Mode.Encode (Maybe String, Maybe String) _ -> Mode Mode.Decode