{-# LANGUAGE DataKinds         #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE KindSignatures    #-}

module GitHub.Data.Actions.Workflows (
    Workflow(..),
    CreateWorkflowDispatchEvent(..),
    ) where

import Prelude ()
import GitHub.Internal.Prelude

import GitHub.Data.Actions.Common (WithTotalCount (WithTotalCount))
import GitHub.Data.Id             (Id)
import GitHub.Data.URL            (URL)

data Workflow = Workflow
    { Workflow -> Id Workflow
workflowWorkflowId :: !(Id Workflow)
    , Workflow -> Text
workflowName       :: !Text
    , Workflow -> Text
workflowPath       :: !Text
    , Workflow -> Text
workflowState      :: !Text
    , Workflow -> UTCTime
workflowCreatedAt  :: !UTCTime
    , Workflow -> UTCTime
workflowUpdatedAt  :: !UTCTime
    , Workflow -> URL
workflowUrl        :: !URL
    , Workflow -> URL
workflowHtmlUrl    :: !URL
    , Workflow -> URL
workflowBadgeUrl   :: !URL
    }
  deriving (Int -> Workflow -> ShowS
[Workflow] -> ShowS
Workflow -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Workflow] -> ShowS
$cshowList :: [Workflow] -> ShowS
show :: Workflow -> String
$cshow :: Workflow -> String
showsPrec :: Int -> Workflow -> ShowS
$cshowsPrec :: Int -> Workflow -> ShowS
Show, Typeable Workflow
Workflow -> DataType
Workflow -> Constr
(forall b. Data b => b -> b) -> Workflow -> Workflow
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Workflow -> u
forall u. (forall d. Data d => d -> u) -> Workflow -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Workflow -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Workflow -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Workflow -> m Workflow
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Workflow -> m Workflow
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Workflow
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Workflow -> c Workflow
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Workflow)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Workflow)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Workflow -> m Workflow
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Workflow -> m Workflow
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Workflow -> m Workflow
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Workflow -> m Workflow
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Workflow -> m Workflow
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Workflow -> m Workflow
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Workflow -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Workflow -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Workflow -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Workflow -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Workflow -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Workflow -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Workflow -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Workflow -> r
gmapT :: (forall b. Data b => b -> b) -> Workflow -> Workflow
$cgmapT :: (forall b. Data b => b -> b) -> Workflow -> Workflow
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Workflow)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Workflow)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Workflow)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Workflow)
dataTypeOf :: Workflow -> DataType
$cdataTypeOf :: Workflow -> DataType
toConstr :: Workflow -> Constr
$ctoConstr :: Workflow -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Workflow
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Workflow
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Workflow -> c Workflow
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Workflow -> c Workflow
Data, Typeable, Workflow -> Workflow -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Workflow -> Workflow -> Bool
$c/= :: Workflow -> Workflow -> Bool
== :: Workflow -> Workflow -> Bool
$c== :: Workflow -> Workflow -> Bool
Eq, Eq Workflow
Workflow -> Workflow -> Bool
Workflow -> Workflow -> Ordering
Workflow -> Workflow -> Workflow
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Workflow -> Workflow -> Workflow
$cmin :: Workflow -> Workflow -> Workflow
max :: Workflow -> Workflow -> Workflow
$cmax :: Workflow -> Workflow -> Workflow
>= :: Workflow -> Workflow -> Bool
$c>= :: Workflow -> Workflow -> Bool
> :: Workflow -> Workflow -> Bool
$c> :: Workflow -> Workflow -> Bool
<= :: Workflow -> Workflow -> Bool
$c<= :: Workflow -> Workflow -> Bool
< :: Workflow -> Workflow -> Bool
$c< :: Workflow -> Workflow -> Bool
compare :: Workflow -> Workflow -> Ordering
$ccompare :: Workflow -> Workflow -> Ordering
Ord, forall x. Rep Workflow x -> Workflow
forall x. Workflow -> Rep Workflow x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Workflow x -> Workflow
$cfrom :: forall x. Workflow -> Rep Workflow x
Generic)

data CreateWorkflowDispatchEvent a = CreateWorkflowDispatchEvent
    { forall a. CreateWorkflowDispatchEvent a -> Text
createWorkflowDispatchEventRef    :: !Text
    , forall a. CreateWorkflowDispatchEvent a -> a
createWorkflowDispatchEventInputs :: !a
    }
  deriving (Int -> CreateWorkflowDispatchEvent a -> ShowS
forall a. Show a => Int -> CreateWorkflowDispatchEvent a -> ShowS
forall a. Show a => [CreateWorkflowDispatchEvent a] -> ShowS
forall a. Show a => CreateWorkflowDispatchEvent a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateWorkflowDispatchEvent a] -> ShowS
$cshowList :: forall a. Show a => [CreateWorkflowDispatchEvent a] -> ShowS
show :: CreateWorkflowDispatchEvent a -> String
$cshow :: forall a. Show a => CreateWorkflowDispatchEvent a -> String
showsPrec :: Int -> CreateWorkflowDispatchEvent a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> CreateWorkflowDispatchEvent a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x.
Rep (CreateWorkflowDispatchEvent a) x
-> CreateWorkflowDispatchEvent a
forall a x.
CreateWorkflowDispatchEvent a
-> Rep (CreateWorkflowDispatchEvent a) x
$cto :: forall a x.
Rep (CreateWorkflowDispatchEvent a) x
-> CreateWorkflowDispatchEvent a
$cfrom :: forall a x.
CreateWorkflowDispatchEvent a
-> Rep (CreateWorkflowDispatchEvent a) x
Generic)

instance (NFData a) => NFData (CreateWorkflowDispatchEvent a) where rnf :: CreateWorkflowDispatchEvent a -> ()
rnf = forall a. (Generic a, GNFData (Rep a)) => a -> ()
genericRnf
instance (Binary a) => Binary (CreateWorkflowDispatchEvent a)

-------------------------------------------------------------------------------
-- JSON instances
-------------------------------------------------------------------------------

instance FromJSON Workflow where
    parseJSON :: Value -> Parser Workflow
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Workflow" forall a b. (a -> b) -> a -> b
$ \Object
o -> Id Workflow
-> Text
-> Text
-> Text
-> UTCTime
-> UTCTime
-> URL
-> URL
-> URL
-> Workflow
Workflow
        forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
        forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
        forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"path"
        forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"state"
        forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"created_at"
        forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"updated_at"
        forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"url"
        forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"html_url"
        forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"badge_url"

instance FromJSON (WithTotalCount Workflow) where
    parseJSON :: Value -> Parser (WithTotalCount Workflow)
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"WorkflowList" forall a b. (a -> b) -> a -> b
$ \Object
o -> forall a. Vector a -> Int -> WithTotalCount a
WithTotalCount
        forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"workflows"
        forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"total_count"

instance ToJSON a => ToJSON (CreateWorkflowDispatchEvent a) where
    toJSON :: CreateWorkflowDispatchEvent a -> Value
toJSON (CreateWorkflowDispatchEvent Text
ref a
inputs) =
        [Pair] -> Value
object [ Key
"ref" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
ref, Key
"inputs" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= a
inputs ]