12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- module Collage.Opts
- ( Command(..)
- , Options(..)
- , getOpts
- ) where
- import Control.Applicative ((<|>))
- import qualified Options.Applicative as Opt
- import qualified System.Directory as Sys
- import qualified System.FilePath as Sys
- data Command
- = Test
- | Splice
- deriving (Eq, Show)
- data Options = Options
- { optFile :: FilePath
- , optVerbose :: Bool
- , optCommand :: Command
- } deriving (Eq, Show)
- desc :: String
- desc = "FINISH ME"
- opts :: Opt.ParserInfo Options
- opts = Opt.info (p Opt.<**> Opt.helper)
- (Opt.progDesc desc <>
- Opt.fullDesc <>
- Opt.header "arglbargl")
- where
- p = Options <$> (path <|> pure "")
- <*> verbose
- <*> Opt.subparser (test <> splice)
- path = Opt.strOption
- (Opt.short 'f' <>
- Opt.long "file" <>
- Opt.metavar "PATH" <>
- Opt.help "The path to the project file")
- verbose = Opt.switch
- (Opt.short 'v' <>
- Opt.long "verbose" <>
- Opt.help "Show debug messages")
- test = Opt.command "test" $ Opt.info
- (pure Test Opt.<**> Opt.helper)
- (Opt.progDesc "test the provided sources")
- splice = Opt.command "splice" $ Opt.info
- (pure Splice Opt.<**> Opt.helper)
- (Opt.progDesc "splice sources into a final draft")
- getOpts :: IO Options
- getOpts = do
- cwd <- Sys.getCurrentDirectory
- options <- Opt.execParser opts
- return $ if null (optFile options)
- then options { optFile = cwd Sys.</> "collage" }
- else options
|