{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards   #-}
{-# LANGUAGE StrictData        #-}
module GitHub.Types.Base.Release where

import           Data.Aeson                 (FromJSON (..), ToJSON (..), object)
import           Data.Aeson.Types           (Value (..), (.:), (.=))
import           Data.Text                  (Text)
import           Test.QuickCheck.Arbitrary  (Arbitrary (..))

import           GitHub.Types.Base.DateTime
import           GitHub.Types.Base.User

------------------------------------------------------------------------------
-- Release

data Release = Release
    { Release -> [Text]
releaseAssets          :: [Text]
    , Release -> Text
releaseAssetsUrl       :: Text
    , Release -> User
releaseAuthor          :: User
    , Release -> Text
releaseBody            :: Text
    , Release -> DateTime
releaseCreatedAt       :: DateTime
    , Release -> Bool
releaseDraft           :: Bool
    , Release -> Text
releaseHtmlUrl         :: Text
    , Release -> Int
releaseId              :: Int
    , Release -> Int
releaseMentionsCount   :: Int
    , Release -> Text
releaseName            :: Text
    , Release -> Text
releaseNodeId          :: Text
    , Release -> Bool
releasePrerelease      :: Bool
    , Release -> Maybe DateTime
releasePublishedAt     :: Maybe DateTime
    , Release -> Text
releaseTagName         :: Text
    , Release -> Maybe Text
releaseTarballUrl      :: Maybe Text
    , Release -> Text
releaseTargetCommitish :: Text
    , Release -> Text
releaseUploadUrl       :: Text
    , Release -> Text
releaseUrl             :: Text
    , Release -> Maybe Text
releaseZipballUrl      :: Maybe Text
    } deriving (Release -> Release -> Bool
(Release -> Release -> Bool)
-> (Release -> Release -> Bool) -> Eq Release
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Release -> Release -> Bool
$c/= :: Release -> Release -> Bool
== :: Release -> Release -> Bool
$c== :: Release -> Release -> Bool
Eq, Int -> Release -> ShowS
[Release] -> ShowS
Release -> String
(Int -> Release -> ShowS)
-> (Release -> String) -> ([Release] -> ShowS) -> Show Release
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Release] -> ShowS
$cshowList :: [Release] -> ShowS
show :: Release -> String
$cshow :: Release -> String
showsPrec :: Int -> Release -> ShowS
$cshowsPrec :: Int -> Release -> ShowS
Show, ReadPrec [Release]
ReadPrec Release
Int -> ReadS Release
ReadS [Release]
(Int -> ReadS Release)
-> ReadS [Release]
-> ReadPrec Release
-> ReadPrec [Release]
-> Read Release
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Release]
$creadListPrec :: ReadPrec [Release]
readPrec :: ReadPrec Release
$creadPrec :: ReadPrec Release
readList :: ReadS [Release]
$creadList :: ReadS [Release]
readsPrec :: Int -> ReadS Release
$creadsPrec :: Int -> ReadS Release
Read)


instance FromJSON Release where
    parseJSON :: Value -> Parser Release
parseJSON (Object Object
x) = [Text]
-> Text
-> User
-> Text
-> DateTime
-> Bool
-> Text
-> Int
-> Int
-> Text
-> Text
-> Bool
-> Maybe DateTime
-> Text
-> Maybe Text
-> Text
-> Text
-> Text
-> Maybe Text
-> Release
Release
        ([Text]
 -> Text
 -> User
 -> Text
 -> DateTime
 -> Bool
 -> Text
 -> Int
 -> Int
 -> Text
 -> Text
 -> Bool
 -> Maybe DateTime
 -> Text
 -> Maybe Text
 -> Text
 -> Text
 -> Text
 -> Maybe Text
 -> Release)
-> Parser [Text]
-> Parser
     (Text
      -> User
      -> Text
      -> DateTime
      -> Bool
      -> Text
      -> Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
x Object -> Key -> Parser [Text]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"assets"
        Parser
  (Text
   -> User
   -> Text
   -> DateTime
   -> Bool
   -> Text
   -> Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Parser Text
-> Parser
     (User
      -> Text
      -> DateTime
      -> Bool
      -> Text
      -> Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"assets_url"
        Parser
  (User
   -> Text
   -> DateTime
   -> Bool
   -> Text
   -> Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Parser User
-> Parser
     (Text
      -> DateTime
      -> Bool
      -> Text
      -> Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser User
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"author"
        Parser
  (Text
   -> DateTime
   -> Bool
   -> Text
   -> Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Parser Text
-> Parser
     (DateTime
      -> Bool
      -> Text
      -> Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"body"
        Parser
  (DateTime
   -> Bool
   -> Text
   -> Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Parser DateTime
-> Parser
     (Bool
      -> Text
      -> Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser DateTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"created_at"
        Parser
  (Bool
   -> Text
   -> Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Parser Bool
-> Parser
     (Text
      -> Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"draft"
        Parser
  (Text
   -> Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Parser Text
-> Parser
     (Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"html_url"
        Parser
  (Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Parser Int
-> Parser
     (Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
        Parser
  (Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Parser Int
-> Parser
     (Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"mentions_count"
        Parser
  (Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Parser Text
-> Parser
     (Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
        Parser
  (Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Parser Text
-> Parser
     (Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"node_id"
        Parser
  (Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Parser Bool
-> Parser
     (Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"prerelease"
        Parser
  (Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Parser (Maybe DateTime)
-> Parser
     (Text
      -> Maybe Text -> Text -> Text -> Text -> Maybe Text -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser (Maybe DateTime)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"published_at"
        Parser
  (Text
   -> Maybe Text -> Text -> Text -> Text -> Maybe Text -> Release)
-> Parser Text
-> Parser
     (Maybe Text -> Text -> Text -> Text -> Maybe Text -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"tag_name"
        Parser
  (Maybe Text -> Text -> Text -> Text -> Maybe Text -> Release)
-> Parser (Maybe Text)
-> Parser (Text -> Text -> Text -> Maybe Text -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"tarball_url"
        Parser (Text -> Text -> Text -> Maybe Text -> Release)
-> Parser Text -> Parser (Text -> Text -> Maybe Text -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"target_commitish"
        Parser (Text -> Text -> Maybe Text -> Release)
-> Parser Text -> Parser (Text -> Maybe Text -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"upload_url"
        Parser (Text -> Maybe Text -> Release)
-> Parser Text -> Parser (Maybe Text -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"url"
        Parser (Maybe Text -> Release)
-> Parser (Maybe Text) -> Parser Release
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
x Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"zipball_url"

    parseJSON Value
_ = String -> Parser Release
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Release"


instance ToJSON Release where
    toJSON :: Release -> Value
toJSON Release{Bool
Int
[Text]
Maybe Text
Maybe DateTime
Text
DateTime
User
releaseZipballUrl :: Maybe Text
releaseUrl :: Text
releaseUploadUrl :: Text
releaseTargetCommitish :: Text
releaseTarballUrl :: Maybe Text
releaseTagName :: Text
releasePublishedAt :: Maybe DateTime
releasePrerelease :: Bool
releaseNodeId :: Text
releaseName :: Text
releaseMentionsCount :: Int
releaseId :: Int
releaseHtmlUrl :: Text
releaseDraft :: Bool
releaseCreatedAt :: DateTime
releaseBody :: Text
releaseAuthor :: User
releaseAssetsUrl :: Text
releaseAssets :: [Text]
releaseZipballUrl :: Release -> Maybe Text
releaseUrl :: Release -> Text
releaseUploadUrl :: Release -> Text
releaseTargetCommitish :: Release -> Text
releaseTarballUrl :: Release -> Maybe Text
releaseTagName :: Release -> Text
releasePublishedAt :: Release -> Maybe DateTime
releasePrerelease :: Release -> Bool
releaseNodeId :: Release -> Text
releaseName :: Release -> Text
releaseMentionsCount :: Release -> Int
releaseId :: Release -> Int
releaseHtmlUrl :: Release -> Text
releaseDraft :: Release -> Bool
releaseCreatedAt :: Release -> DateTime
releaseBody :: Release -> Text
releaseAuthor :: Release -> User
releaseAssetsUrl :: Release -> Text
releaseAssets :: Release -> [Text]
..} = [Pair] -> Value
object
        [ Key
"assets"           Key -> [Text] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Text]
releaseAssets
        , Key
"assets_url"       Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
releaseAssetsUrl
        , Key
"author"           Key -> User -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= User
releaseAuthor
        , Key
"body"             Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
releaseBody
        , Key
"created_at"       Key -> DateTime -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= DateTime
releaseCreatedAt
        , Key
"draft"            Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Bool
releaseDraft
        , Key
"html_url"         Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
releaseHtmlUrl
        , Key
"id"               Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
releaseId
        , Key
"mentions_count"   Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
releaseMentionsCount
        , Key
"name"             Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
releaseName
        , Key
"node_id"          Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
releaseNodeId
        , Key
"prerelease"       Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Bool
releasePrerelease
        , Key
"published_at"     Key -> Maybe DateTime -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe DateTime
releasePublishedAt
        , Key
"tag_name"         Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
releaseTagName
        , Key
"tarball_url"      Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
releaseTarballUrl
        , Key
"target_commitish" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
releaseTargetCommitish
        , Key
"upload_url"       Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
releaseUploadUrl
        , Key
"url"              Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
releaseUrl
        , Key
"zipball_url"      Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
releaseZipballUrl
        ]


instance Arbitrary Release where
    arbitrary :: Gen Release
arbitrary = [Text]
-> Text
-> User
-> Text
-> DateTime
-> Bool
-> Text
-> Int
-> Int
-> Text
-> Text
-> Bool
-> Maybe DateTime
-> Text
-> Maybe Text
-> Text
-> Text
-> Text
-> Maybe Text
-> Release
Release
        ([Text]
 -> Text
 -> User
 -> Text
 -> DateTime
 -> Bool
 -> Text
 -> Int
 -> Int
 -> Text
 -> Text
 -> Bool
 -> Maybe DateTime
 -> Text
 -> Maybe Text
 -> Text
 -> Text
 -> Text
 -> Maybe Text
 -> Release)
-> Gen [Text]
-> Gen
     (Text
      -> User
      -> Text
      -> DateTime
      -> Bool
      -> Text
      -> Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen [Text]
forall a. Arbitrary a => Gen a
arbitrary
        Gen
  (Text
   -> User
   -> Text
   -> DateTime
   -> Bool
   -> Text
   -> Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Gen Text
-> Gen
     (User
      -> Text
      -> DateTime
      -> Bool
      -> Text
      -> Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Text
forall a. Arbitrary a => Gen a
arbitrary
        Gen
  (User
   -> Text
   -> DateTime
   -> Bool
   -> Text
   -> Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Gen User
-> Gen
     (Text
      -> DateTime
      -> Bool
      -> Text
      -> Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen User
forall a. Arbitrary a => Gen a
arbitrary
        Gen
  (Text
   -> DateTime
   -> Bool
   -> Text
   -> Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Gen Text
-> Gen
     (DateTime
      -> Bool
      -> Text
      -> Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Text
forall a. Arbitrary a => Gen a
arbitrary
        Gen
  (DateTime
   -> Bool
   -> Text
   -> Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Gen DateTime
-> Gen
     (Bool
      -> Text
      -> Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen DateTime
forall a. Arbitrary a => Gen a
arbitrary
        Gen
  (Bool
   -> Text
   -> Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Gen Bool
-> Gen
     (Text
      -> Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Bool
forall a. Arbitrary a => Gen a
arbitrary
        Gen
  (Text
   -> Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Gen Text
-> Gen
     (Int
      -> Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Text
forall a. Arbitrary a => Gen a
arbitrary
        Gen
  (Int
   -> Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Gen Int
-> Gen
     (Int
      -> Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Int
forall a. Arbitrary a => Gen a
arbitrary
        Gen
  (Int
   -> Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Gen Int
-> Gen
     (Text
      -> Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Int
forall a. Arbitrary a => Gen a
arbitrary
        Gen
  (Text
   -> Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Gen Text
-> Gen
     (Text
      -> Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Text
forall a. Arbitrary a => Gen a
arbitrary
        Gen
  (Text
   -> Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Gen Text
-> Gen
     (Bool
      -> Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Text
forall a. Arbitrary a => Gen a
arbitrary
        Gen
  (Bool
   -> Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Gen Bool
-> Gen
     (Maybe DateTime
      -> Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Maybe Text
      -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Bool
forall a. Arbitrary a => Gen a
arbitrary
        Gen
  (Maybe DateTime
   -> Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Maybe Text
   -> Release)
-> Gen (Maybe DateTime)
-> Gen
     (Text
      -> Maybe Text -> Text -> Text -> Text -> Maybe Text -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Maybe DateTime)
forall a. Arbitrary a => Gen a
arbitrary
        Gen
  (Text
   -> Maybe Text -> Text -> Text -> Text -> Maybe Text -> Release)
-> Gen Text
-> Gen
     (Maybe Text -> Text -> Text -> Text -> Maybe Text -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Text
forall a. Arbitrary a => Gen a
arbitrary
        Gen (Maybe Text -> Text -> Text -> Text -> Maybe Text -> Release)
-> Gen (Maybe Text)
-> Gen (Text -> Text -> Text -> Maybe Text -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Maybe Text)
forall a. Arbitrary a => Gen a
arbitrary
        Gen (Text -> Text -> Text -> Maybe Text -> Release)
-> Gen Text -> Gen (Text -> Text -> Maybe Text -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Text
forall a. Arbitrary a => Gen a
arbitrary
        Gen (Text -> Text -> Maybe Text -> Release)
-> Gen Text -> Gen (Text -> Maybe Text -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Text
forall a. Arbitrary a => Gen a
arbitrary
        Gen (Text -> Maybe Text -> Release)
-> Gen Text -> Gen (Maybe Text -> Release)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Text
forall a. Arbitrary a => Gen a
arbitrary
        Gen (Maybe Text -> Release) -> Gen (Maybe Text) -> Gen Release
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Maybe Text)
forall a. Arbitrary a => Gen a
arbitrary