{-# LANGUAGE NoImplicitPrelude #-}

module Stack.Options.UploadParser
  ( UploadOpts (..)
  , UploadVariant (..)
  , uploadOptsParser
  ) where

import           Options.Applicative
import           Stack.Options.SDistParser ( sdistOptsParser )
import           Stack.Prelude
import           Stack.SDist ( SDistOpts (..) )

data UploadOpts = UploadOpts
  { UploadOpts -> SDistOpts
uoptsSDistOpts :: SDistOpts
  , UploadOpts -> UploadVariant
uoptsUploadVariant :: UploadVariant
  -- ^ Says whether to publish the package or upload as a release candidate

  }

data UploadVariant
  = Publishing
  -- ^ Publish the package

  | Candidate
  -- ^ Create a package candidate


-- | Parser for arguments to `stack upload`

uploadOptsParser :: Parser UploadOpts
uploadOptsParser :: Parser UploadOpts
uploadOptsParser =
  SDistOpts -> UploadVariant -> UploadOpts
UploadOpts
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser SDistOpts
sdistOptsParser
    forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser UploadVariant
uploadVariant
  where
    uploadVariant :: Parser UploadVariant
uploadVariant =
      forall a. a -> a -> Mod FlagFields a -> Parser a
flag UploadVariant
Publishing UploadVariant
Candidate
        (forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"candidate" forall a. Semigroup a => a -> a -> a
<>
         forall (f :: * -> *) a. String -> Mod f a
help String
"Upload as a package candidate")