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