github-tools-0.1.2: src/GitHub/Types/Base/PushCommit.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
module GitHub.Types.Base.PushCommit 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.Author
------------------------------------------------------------------------------
-- PushCommit
data PushCommit = PushCommit
{ pushCommitAdded :: [Text]
, pushCommitAuthor :: Author
, pushCommitCommitter :: Maybe Author
, pushCommitDistinct :: Bool
, pushCommitId :: Text
, pushCommitMessage :: Text
, pushCommitModified :: [Text]
, pushCommitRemoved :: [Text]
, pushCommitTimestamp :: Text
, pushCommitTreeId :: Text
, pushCommitUrl :: Text
} deriving (Eq, Show, Read)
instance FromJSON PushCommit where
parseJSON (Object x) = PushCommit
<$> x .: "added"
<*> x .: "author"
<*> x .: "committer"
<*> x .: "distinct"
<*> x .: "id"
<*> x .: "message"
<*> x .: "modified"
<*> x .: "removed"
<*> x .: "timestamp"
<*> x .: "tree_id"
<*> x .: "url"
parseJSON _ = fail "PushCommit"
instance ToJSON PushCommit where
toJSON PushCommit{..} = object
[ "added" .= pushCommitAdded
, "author" .= pushCommitAuthor
, "committer" .= pushCommitCommitter
, "distinct" .= pushCommitDistinct
, "id" .= pushCommitId
, "message" .= pushCommitMessage
, "modified" .= pushCommitModified
, "removed" .= pushCommitRemoved
, "timestamp" .= pushCommitTimestamp
, "tree_id" .= pushCommitTreeId
, "url" .= pushCommitUrl
]
instance Arbitrary PushCommit where
arbitrary = PushCommit
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary