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 /= :: Config -> Config -> Bool $c/= :: Config -> Config -> Bool == :: Config -> Config -> Bool $c== :: 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 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 :: Bool -> Bool -> Bool -> Maybe String -> Maybe Mode -> Maybe String -> Bool -> Bool -> Bool -> Config 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 :: Bool compact = Bool True } Flag Flag.Fast -> Config -> Either String Config forall a b. b -> Either a b Right Config config { fast :: Bool fast = Bool True } Flag Flag.Help -> Config -> Either String Config forall a b. b -> Either a b Right Config config { help :: Bool help = Bool True } Flag.Input String x -> Config -> Either String Config forall a b. b -> Either a b Right Config config { input :: Maybe String input = String -> Maybe String forall a. a -> Maybe a Just String 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 :: Maybe Mode mode = Mode -> Maybe Mode forall a. a -> Maybe a Just Mode y } Flag.Output String x -> Config -> Either String Config forall a b. b -> Either a b Right Config config { output :: Maybe String output = String -> Maybe String forall a. a -> Maybe a Just String x } Flag Flag.Schema -> Config -> Either String Config forall a b. b -> Either a b Right Config config { schema :: Bool schema = Bool True } Flag Flag.SkipCrc -> Config -> Either String Config forall a b. b -> Either a b Right Config config { skipCrc :: Bool skipCrc = Bool True } Flag Flag.Version -> Config -> Either String Config 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 = ShowS -> Maybe String -> Maybe String 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 (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