aboutsummaryrefslogtreecommitdiff
path: root/src/Chelleport/Args.hs
blob: 8c36c85d5b35c5f36df146be6c960eefaaa973a3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
module Chelleport.Args where

import Chelleport.Types
import Data.Default (Default (def))

parseArgs :: [String] -> Either String Configuration
parseArgs [] = Right def
parseArgs (arg : args)
  | arg `elem` ["-h", "--help"] = Right $ def {configShowHelp = True}
  | arg `elem` ["-m", "--mode"] = case args of
      [] -> Left "Missing value for mode"
      (mode : rest) -> parseArgs rest >>= updateMode mode
  | otherwise = Left $ "Unrecognized argument: " ++ arg

updateMode :: String -> Configuration -> Either String Configuration
updateMode "hints" cfg = Right cfg {configMode = defaultHintsMode}
updateMode "search" cfg = Right cfg {configMode = defaultSearchMode}
updateMode mode _ = Left $ "Invalid mode: " ++ mode