github-tools-0.1.2: src/GitHub/Types/Base/Release.hs
{-# 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
{ releaseAssets :: [Text]
, releaseAssetsUrl :: Text
, releaseAuthor :: User
, releaseBody :: Text
, releaseCreatedAt :: DateTime
, releaseDraft :: Bool
, releaseHtmlUrl :: Text
, releaseId :: Int
, releaseMentionsCount :: Int
, releaseName :: Text
, releaseNodeId :: Text
, releasePrerelease :: Bool
, releasePublishedAt :: Maybe DateTime
, releaseTagName :: Text
, releaseTarballUrl :: Maybe Text
, releaseTargetCommitish :: Text
, releaseUploadUrl :: Text
, releaseUrl :: Text
, releaseZipballUrl :: Maybe Text
} deriving (Eq, Show, Read)
instance FromJSON Release where
parseJSON (Object x) = Release
<$> x .: "assets"
<*> x .: "assets_url"
<*> x .: "author"
<*> x .: "body"
<*> x .: "created_at"
<*> x .: "draft"
<*> x .: "html_url"
<*> x .: "id"
<*> x .: "mentions_count"
<*> x .: "name"
<*> x .: "node_id"
<*> x .: "prerelease"
<*> x .: "published_at"
<*> x .: "tag_name"
<*> x .: "tarball_url"
<*> x .: "target_commitish"
<*> x .: "upload_url"
<*> x .: "url"
<*> x .: "zipball_url"
parseJSON _ = fail "Release"
instance ToJSON Release where
toJSON Release{..} = object
[ "assets" .= releaseAssets
, "assets_url" .= releaseAssetsUrl
, "author" .= releaseAuthor
, "body" .= releaseBody
, "created_at" .= releaseCreatedAt
, "draft" .= releaseDraft
, "html_url" .= releaseHtmlUrl
, "id" .= releaseId
, "mentions_count" .= releaseMentionsCount
, "name" .= releaseName
, "node_id" .= releaseNodeId
, "prerelease" .= releasePrerelease
, "published_at" .= releasePublishedAt
, "tag_name" .= releaseTagName
, "tarball_url" .= releaseTarballUrl
, "target_commitish" .= releaseTargetCommitish
, "upload_url" .= releaseUploadUrl
, "url" .= releaseUrl
, "zipball_url" .= releaseZipballUrl
]
instance Arbitrary Release where
arbitrary = Release
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary