summaryrefslogtreecommitdiff
path: root/src/SlackBuilder/CommandLine.hs
blob: 7cfe7471ebf0ace5ba2a0eaf07697b1569171357 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
module SlackBuilder.CommandLine
    ( GhArguments(..)
    , SlackBuilderCommand(..)
    , PackagistArguments(..)
    , TextArguments(..)
    , slackBuilderParser
    ) where

import Data.Text (Text)
import Options.Applicative
    ( Parser
    , ParserInfo(..)
    , metavar
    , argument
    , str
    , info
    , fullDesc
    , subparser
    , command,
    )

data SlackBuilderCommand
    = CategoryCommand Text
    | CloneCommand Text Text Text
    | Up2DateCommand

data PackagistArguments = PackagistArguments
    { vendor :: Text
    , name :: Text
    } deriving (Eq, Show)

data GhArguments = GhArguments
    { owner :: Text
    , name :: Text
    , transform :: Maybe Text
    } deriving (Eq, Show)

data TextArguments = TextArguments
    { versionPicker :: Text -> Text
    , textURL :: Text
    }

slackBuilderParser :: ParserInfo SlackBuilderCommand
slackBuilderParser = info slackBuilderCommand fullDesc

slackBuilderCommand :: Parser SlackBuilderCommand
slackBuilderCommand = subparser
    $ command "category" (info categoryCommand mempty)
    <> command "clone" (info cloneCommand mempty)
    <> command "up2date" (info up2DateCommand mempty)
  where
    categoryCommand = CategoryCommand
        <$> argument str (metavar "PKGNAM")
    cloneCommand = CloneCommand
        <$> argument str (metavar "REPO")
        <*> argument str (metavar "TARBALL")
        <*> argument str (metavar "TAG_PREFIX")
    up2DateCommand = pure Up2DateCommand