github-tools-0.1.2: src/GitHub/Types/Base/Review.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
module GitHub.Types.Base.Review 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.ReviewLinks
import GitHub.Types.Base.User
------------------------------------------------------------------------------
-- Review
data Review = Review
{ reviewId :: Int
, reviewUser :: User
, reviewAuthorAssociation :: Text
, reviewCommitId :: Text
, reviewBody :: Maybe Text
, reviewSubmittedAt :: DateTime
, reviewNodeId :: Text
, reviewState :: Text
, reviewHtmlUrl :: Text
, reviewPullRequestUrl :: Text
, reviewLinks :: ReviewLinks
} deriving (Eq, Show, Read)
instance FromJSON Review where
parseJSON (Object x) = Review
<$> x .: "id"
<*> x .: "user"
<*> x .: "author_association"
<*> x .: "commit_id"
<*> x .: "body"
<*> x .: "submitted_at"
<*> x .: "node_id"
<*> x .: "state"
<*> x .: "html_url"
<*> x .: "pull_request_url"
<*> x .: "_links"
parseJSON _ = fail "Review"
instance ToJSON Review where
toJSON Review{..} = object
[ "id" .= reviewId
, "user" .= reviewUser
, "author_association" .= reviewAuthorAssociation
, "commit_id" .= reviewCommitId
, "body" .= reviewBody
, "submitted_at" .= reviewSubmittedAt
, "node_id" .= reviewNodeId
, "state" .= reviewState
, "html_url" .= reviewHtmlUrl
, "pull_request_url" .= reviewPullRequestUrl
, "_links" .= reviewLinks
]
instance Arbitrary Review where
arbitrary = Review
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary