]> glassweightruler.freedombox.rocks Git - xdg-ninja.git/blob - src/xdgnj.hs
Restructure haskell code
[xdg-ninja.git] / src / xdgnj.hs
1 module Main where
2
3 import AddProgram
4 import Data.Semigroup ((<>))
5 import Options.Applicative
6
7 data Args = AddProgram
8 | EditProgram String
9 | PreviewProgram String
10 | LintProgram String
11 | Lint
12 deriving Show
13
14 editProgram :: Parser Args
15 editProgram = EditProgram <$> argument str (metavar "PROGRAM")
16
17 previewProgram :: Parser Args
18 previewProgram = PreviewProgram <$> argument str (metavar "PROGRAM")
19
20 lintProgram :: Parser Args
21 lintProgram = LintProgram <$> argument str (metavar "PROGRAM")
22
23 argsParser :: Parser Args
24 argsParser = subparser
25 (command "add" (info (pure AddProgram) (progDesc "Add program"))
26 <> command "edit" (info editProgram (progDesc "Edit program config"))
27 <> command "prev" (info previewProgram (progDesc "Preview program config"))
28 <> command "lintp" (info lintProgram (progDesc "Lint program config"))
29 <> command "lint" (info (pure Lint) (progDesc "Lint all program configs")))
30
31 args :: ParserInfo Args
32 args = info (argsParser <**> helper)
33 ( fullDesc
34 <> progDesc "xdg-ninja utilities")
35
36 main :: IO ()
37 main = do
38 args <- execParser args
39 case args of
40 AddProgram -> saveProgram
41 _ -> print args