packages feed

octohat-0.1.4: src-demo/Web/GitHub/CLI/Options.hs

module Web.GitHub.CLI.Options ( TeamOptions(..)
                              , TeamCommand(..)
                              , teamOptions) where

import Options.Applicative

type OrganizationName = String
type Username = String
type TeamName = String

data TeamCommand = ListTeams OrganizationName
                 | ListMembers OrganizationName TeamName
                 | AddToTeam OrganizationName TeamName Username
                 | DeleteFromTeam OrganizationName TeamName Username 

data TeamOptions = TeamOptions TeamCommand

teamOptions :: Parser TeamOptions
teamOptions = TeamOptions <$> parseTeamCommand

parseTeamCommand :: Parser TeamCommand
parseTeamCommand = subparser $
  command "list-teams"  (info listTeams      (progDesc "List teams in a organization" ))          <>
  command "members-in"  (info listMembers    (progDesc "List members in team and organization" )) <>
  command "add-to-team" (info addToTeam      (progDesc "Add users to a team"))                    <>
  command "delete-user" (info deleteFromTeam (progDesc "Delete a user from a team"))

listTeams :: Parser TeamCommand
listTeams = ListTeams <$> argument str (metavar "<organization name>")

listMembers :: Parser TeamCommand
listMembers = ListMembers <$> argument str (metavar "<organization-name>")
                          <*> argument str (metavar "<team-name>")

addToTeam :: Parser TeamCommand
addToTeam = AddToTeam <$> argument str (metavar "<organization name>")
                      <*> argument str (metavar "<team name>")
                      <*> argument str (metavar "<github username>")

deleteFromTeam :: Parser TeamCommand
deleteFromTeam = DeleteFromTeam <$> argument str (metavar "<organization name>")
                                <*> argument str (metavar "<team name>")
                                <*> argument str (metavar "<github username>")