module HaskellCI.Config.Components where

import HaskellCI.Prelude

import qualified Distribution.Compat.CharParsing as C
import qualified Distribution.Parsec             as C
import qualified Distribution.Pretty             as C
import qualified Text.PrettyPrint                as PP

-------------------------------------------------------------------------------
-- Single action
-------------------------------------------------------------------------------

data Components
    = ComponentsAll
    | ComponentsLibs
  deriving (Components -> Components -> Bool
(Components -> Components -> Bool)
-> (Components -> Components -> Bool) -> Eq Components
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Components -> Components -> Bool
== :: Components -> Components -> Bool
$c/= :: Components -> Components -> Bool
/= :: Components -> Components -> Bool
Eq, Int -> Components -> ShowS
[Components] -> ShowS
Components -> String
(Int -> Components -> ShowS)
-> (Components -> String)
-> ([Components] -> ShowS)
-> Show Components
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Components -> ShowS
showsPrec :: Int -> Components -> ShowS
$cshow :: Components -> String
show :: Components -> String
$cshowList :: [Components] -> ShowS
showList :: [Components] -> ShowS
Show)

instance C.Pretty Components where
    pretty :: Components -> Doc
pretty Components
ComponentsAll  = String -> Doc
PP.text String
"all"
    pretty Components
ComponentsLibs = String -> Doc
PP.text String
"libs"

instance C.Parsec Components where
    parsec :: forall (m :: * -> *). CabalParsing m => m Components
parsec = do
        String
t <- m String
forall (m :: * -> *). CabalParsing m => m String
C.parsecToken
        case String
t of
            String
"all"  -> Components -> m Components
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Components
ComponentsAll
            String
"libs" -> Components -> m Components
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Components
ComponentsLibs
            String
_      -> String -> m Components
forall a. String -> m a
forall (m :: * -> *) a. Parsing m => String -> m a
C.unexpected (String -> m Components) -> String -> m Components
forall a b. (a -> b) -> a -> b
$ String
"Component " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
t