aboutsummaryrefslogtreecommitdiff
path: root/src/Chelleport/Args.hs
blob: d01e94f3b8e03d7e19287b6013c87bb46d91dda1 (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 = ModeHints def}
updateMode "search" cfg = Right cfg {configMode = ModeSearch def}
updateMode mode _ = Left $ "Invalid mode: " ++ mode