-----------------------------------------------------------------------------
-- |
-- License     :  BSD-3-Clause
-- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
--
-- The pull requests API as documented at
-- <http://developer.github.com/v3/pulls/>.
module GitHub.Endpoints.PullRequests (
    pullRequestsFor,
    pullRequestsFor',
    pullRequestsForR,
    pullRequest',
    pullRequest,
    pullRequestR,
    pullRequestDiff',
    pullRequestDiff,
    pullRequestDiffR,
    pullRequestPatch',
    pullRequestPatch,
    pullRequestPatchR,
    createPullRequest,
    createPullRequestR,
    updatePullRequest,
    updatePullRequestR,
    pullRequestCommits',
    pullRequestCommitsIO,
    pullRequestCommitsR,
    pullRequestFiles',
    pullRequestFiles,
    pullRequestFilesR,
    isPullRequestMerged,
    isPullRequestMergedR,
    mergePullRequest,
    mergePullRequestR,
    module GitHub.Data
    ) where

import GitHub.Data
import GitHub.Internal.Prelude
import GitHub.Request
import Prelude ()
import Data.ByteString.Lazy (ByteString)

-- | All open pull requests for the repo, by owner and repo name.
--
-- > pullRequestsFor "rails" "rails"
pullRequestsFor :: Name Owner -> Name Repo -> IO (Either Error (Vector SimplePullRequest))
pullRequestsFor :: Name Owner
-> Name Repo -> IO (Either Error (Vector SimplePullRequest))
pullRequestsFor user :: Name Owner
user repo :: Name Repo
repo =
    GenRequest 'MtJSON 'RO (Vector SimplePullRequest)
-> IO (Either Error (Vector SimplePullRequest))
forall (mt :: MediaType *) a.
ParseResponse mt a =>
GenRequest mt 'RO a -> IO (Either Error a)
executeRequest' (GenRequest 'MtJSON 'RO (Vector SimplePullRequest)
 -> IO (Either Error (Vector SimplePullRequest)))
-> GenRequest 'MtJSON 'RO (Vector SimplePullRequest)
-> IO (Either Error (Vector SimplePullRequest))
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> PullRequestMod
-> FetchCount
-> GenRequest 'MtJSON 'RO (Vector SimplePullRequest)
forall (k :: RW).
Name Owner
-> Name Repo
-> PullRequestMod
-> FetchCount
-> Request k (Vector SimplePullRequest)
pullRequestsForR Name Owner
user Name Repo
repo PullRequestMod
forall a. Monoid a => a
mempty FetchCount
FetchAll

-- | All open pull requests for the repo, by owner and repo name.
--
-- > pullRequestsFor "rails" "rails"
pullRequestsFor' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector SimplePullRequest))
pullRequestsFor' :: Maybe Auth
-> Name Owner
-> Name Repo
-> IO (Either Error (Vector SimplePullRequest))
pullRequestsFor' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo =
    Maybe Auth
-> GenRequest 'MtJSON 'RO (Vector SimplePullRequest)
-> IO (Either Error (Vector SimplePullRequest))
forall am (mt :: MediaType *) a.
(AuthMethod am, ParseResponse mt a) =>
Maybe am -> GenRequest mt 'RO a -> IO (Either Error a)
executeRequestMaybe Maybe Auth
auth (GenRequest 'MtJSON 'RO (Vector SimplePullRequest)
 -> IO (Either Error (Vector SimplePullRequest)))
-> GenRequest 'MtJSON 'RO (Vector SimplePullRequest)
-> IO (Either Error (Vector SimplePullRequest))
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> PullRequestMod
-> FetchCount
-> GenRequest 'MtJSON 'RO (Vector SimplePullRequest)
forall (k :: RW).
Name Owner
-> Name Repo
-> PullRequestMod
-> FetchCount
-> Request k (Vector SimplePullRequest)
pullRequestsForR Name Owner
user Name Repo
repo PullRequestMod
forall a. Monoid a => a
mempty FetchCount
FetchAll

-- | List pull requests.
-- See <https://developer.github.com/v3/pulls/#list-pull-requests>
pullRequestsForR
    :: Name Owner
    -> Name Repo
    -> PullRequestMod
    -> FetchCount
    -> Request k (Vector SimplePullRequest)
pullRequestsForR :: Name Owner
-> Name Repo
-> PullRequestMod
-> FetchCount
-> Request k (Vector SimplePullRequest)
pullRequestsForR user :: Name Owner
user repo :: Name Repo
repo opts :: PullRequestMod
opts = Paths
-> QueryString
-> FetchCount
-> Request k (Vector SimplePullRequest)
forall a (mt :: RW).
FromJSON a =>
Paths -> QueryString -> FetchCount -> Request mt (Vector a)
pagedQuery
    ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "pulls"]
    (PullRequestMod -> QueryString
prModToQueryString PullRequestMod
opts)

-- | Obtain the diff of a pull request
-- See <https://developer.github.com/v3/pulls/#get-a-single-pull-request>
pullRequestDiff' :: Maybe Auth -> Name Owner -> Name Repo -> IssueNumber -> IO (Either Error ByteString)
pullRequestDiff' :: Maybe Auth
-> Name Owner
-> Name Repo
-> IssueNumber
-> IO (Either Error ByteString)
pullRequestDiff' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid =
    Maybe Auth
-> GenRequest 'MtDiff 'RO ByteString
-> IO (Either Error ByteString)
forall am (mt :: MediaType *) a.
(AuthMethod am, ParseResponse mt a) =>
Maybe am -> GenRequest mt 'RO a -> IO (Either Error a)
executeRequestMaybe Maybe Auth
auth (GenRequest 'MtDiff 'RO ByteString -> IO (Either Error ByteString))
-> GenRequest 'MtDiff 'RO ByteString
-> IO (Either Error ByteString)
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo -> IssueNumber -> GenRequest 'MtDiff 'RO ByteString
forall (rw :: RW).
Name Owner
-> Name Repo -> IssueNumber -> GenRequest 'MtDiff rw ByteString
pullRequestDiffR Name Owner
user Name Repo
repo IssueNumber
prid

-- | Obtain the diff of a pull request
-- See <https://developer.github.com/v3/pulls/#get-a-single-pull-request>
pullRequestDiff :: Name Owner -> Name Repo -> IssueNumber -> IO (Either Error ByteString)
pullRequestDiff :: Name Owner
-> Name Repo -> IssueNumber -> IO (Either Error ByteString)
pullRequestDiff = Maybe Auth
-> Name Owner
-> Name Repo
-> IssueNumber
-> IO (Either Error ByteString)
pullRequestDiff' Maybe Auth
forall a. Maybe a
Nothing

-- | Query a single pull request to obtain the diff
-- See <https://developer.github.com/v3/pulls/#get-a-single-pull-request>
pullRequestDiffR :: Name Owner -> Name Repo -> IssueNumber -> GenRequest 'MtDiff rw ByteString
pullRequestDiffR :: Name Owner
-> Name Repo -> IssueNumber -> GenRequest 'MtDiff rw ByteString
pullRequestDiffR user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid =
    Paths -> QueryString -> GenRequest 'MtDiff rw ByteString
forall (mt :: MediaType *) (rw :: RW) a.
Paths -> QueryString -> GenRequest mt rw a
Query ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "pulls", IssueNumber -> Text
forall a. IsPathPart a => a -> Text
toPathPart IssueNumber
prid] []

-- | Obtain the patch of a pull request
--
-- See <https://developer.github.com/v3/pulls/#get-a-single-pull-request>
pullRequestPatch' :: Maybe Auth -> Name Owner -> Name Repo -> IssueNumber -> IO (Either Error ByteString)
pullRequestPatch' :: Maybe Auth
-> Name Owner
-> Name Repo
-> IssueNumber
-> IO (Either Error ByteString)
pullRequestPatch' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid =
    Maybe Auth
-> GenRequest 'MtPatch 'RO ByteString
-> IO (Either Error ByteString)
forall am (mt :: MediaType *) a.
(AuthMethod am, ParseResponse mt a) =>
Maybe am -> GenRequest mt 'RO a -> IO (Either Error a)
executeRequestMaybe Maybe Auth
auth (GenRequest 'MtPatch 'RO ByteString
 -> IO (Either Error ByteString))
-> GenRequest 'MtPatch 'RO ByteString
-> IO (Either Error ByteString)
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo -> IssueNumber -> GenRequest 'MtPatch 'RO ByteString
forall (rw :: RW).
Name Owner
-> Name Repo -> IssueNumber -> GenRequest 'MtPatch rw ByteString
pullRequestPatchR Name Owner
user Name Repo
repo IssueNumber
prid

-- | Obtain the patch of a pull request
-- See <https://developer.github.com/v3/pulls/#get-a-single-pull-request>
pullRequestPatch :: Name Owner -> Name Repo -> IssueNumber -> IO (Either Error ByteString)
pullRequestPatch :: Name Owner
-> Name Repo -> IssueNumber -> IO (Either Error ByteString)
pullRequestPatch = Maybe Auth
-> Name Owner
-> Name Repo
-> IssueNumber
-> IO (Either Error ByteString)
pullRequestPatch' Maybe Auth
forall a. Maybe a
Nothing

-- | Query a single pull request to obtain the patch
-- See <https://developer.github.com/v3/pulls/#get-a-single-pull-request>
pullRequestPatchR :: Name Owner -> Name Repo -> IssueNumber -> GenRequest 'MtPatch rw ByteString
pullRequestPatchR :: Name Owner
-> Name Repo -> IssueNumber -> GenRequest 'MtPatch rw ByteString
pullRequestPatchR user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid =
    Paths -> QueryString -> GenRequest 'MtPatch rw ByteString
forall (mt :: MediaType *) (rw :: RW) a.
Paths -> QueryString -> GenRequest mt rw a
Query ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "pulls", IssueNumber -> Text
forall a. IsPathPart a => a -> Text
toPathPart IssueNumber
prid] []

-- | A detailed pull request, which has much more information. This takes the
-- repo owner and name along with the number assigned to the pull request.
-- With authentification.
--
-- > pullRequest' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" 562
pullRequest' :: Maybe Auth -> Name Owner -> Name Repo -> IssueNumber -> IO (Either Error PullRequest)
pullRequest' :: Maybe Auth
-> Name Owner
-> Name Repo
-> IssueNumber
-> IO (Either Error PullRequest)
pullRequest' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid =
    Maybe Auth
-> GenRequest 'MtJSON 'RO PullRequest
-> IO (Either Error PullRequest)
forall am (mt :: MediaType *) a.
(AuthMethod am, ParseResponse mt a) =>
Maybe am -> GenRequest mt 'RO a -> IO (Either Error a)
executeRequestMaybe Maybe Auth
auth (GenRequest 'MtJSON 'RO PullRequest
 -> IO (Either Error PullRequest))
-> GenRequest 'MtJSON 'RO PullRequest
-> IO (Either Error PullRequest)
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo -> IssueNumber -> GenRequest 'MtJSON 'RO PullRequest
forall (k :: RW).
Name Owner -> Name Repo -> IssueNumber -> Request k PullRequest
pullRequestR Name Owner
user Name Repo
repo IssueNumber
prid

-- | A detailed pull request, which has much more information. This takes the
-- repo owner and name along with the number assigned to the pull request.
--
-- > pullRequest "thoughtbot" "paperclip" 562
pullRequest :: Name Owner -> Name Repo -> IssueNumber -> IO (Either Error PullRequest)
pullRequest :: Name Owner
-> Name Repo -> IssueNumber -> IO (Either Error PullRequest)
pullRequest = Maybe Auth
-> Name Owner
-> Name Repo
-> IssueNumber
-> IO (Either Error PullRequest)
pullRequest' Maybe Auth
forall a. Maybe a
Nothing

-- | Query a single pull request.
-- See <https://developer.github.com/v3/pulls/#get-a-single-pull-request>
pullRequestR :: Name Owner -> Name Repo -> IssueNumber -> Request k PullRequest
pullRequestR :: Name Owner -> Name Repo -> IssueNumber -> Request k PullRequest
pullRequestR user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid =
    Paths -> QueryString -> Request k PullRequest
forall (mt :: RW) a. Paths -> QueryString -> Request mt a
query ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "pulls", IssueNumber -> Text
forall a. IsPathPart a => a -> Text
toPathPart IssueNumber
prid] []

createPullRequest :: Auth
                  -> Name Owner
                  -> Name Repo
                  -> CreatePullRequest
                  -> IO (Either Error PullRequest)
createPullRequest :: Auth
-> Name Owner
-> Name Repo
-> CreatePullRequest
-> IO (Either Error PullRequest)
createPullRequest auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo cpr :: CreatePullRequest
cpr =
    Auth
-> GenRequest 'MtJSON 'RW PullRequest
-> IO (Either Error PullRequest)
forall am (mt :: MediaType *) a (rw :: RW).
(AuthMethod am, ParseResponse mt a) =>
am -> GenRequest mt rw a -> IO (Either Error a)
executeRequest Auth
auth (GenRequest 'MtJSON 'RW PullRequest
 -> IO (Either Error PullRequest))
-> GenRequest 'MtJSON 'RW PullRequest
-> IO (Either Error PullRequest)
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> CreatePullRequest
-> GenRequest 'MtJSON 'RW PullRequest
createPullRequestR Name Owner
user Name Repo
repo CreatePullRequest
cpr

-- | Create a pull request.
-- See <https://developer.github.com/v3/pulls/#create-a-pull-request>
createPullRequestR :: Name Owner
                   -> Name Repo
                   -> CreatePullRequest
                   -> Request 'RW PullRequest
createPullRequestR :: Name Owner
-> Name Repo
-> CreatePullRequest
-> GenRequest 'MtJSON 'RW PullRequest
createPullRequestR user :: Name Owner
user repo :: Name Repo
repo cpr :: CreatePullRequest
cpr =
    CommandMethod
-> Paths -> ByteString -> GenRequest 'MtJSON 'RW PullRequest
forall a. CommandMethod -> Paths -> ByteString -> Request 'RW a
command CommandMethod
Post ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "pulls"] (CreatePullRequest -> ByteString
forall a. ToJSON a => a -> ByteString
encode CreatePullRequest
cpr)

-- | Update a pull request
updatePullRequest :: Auth -> Name Owner -> Name Repo -> IssueNumber -> EditPullRequest -> IO (Either Error PullRequest)
updatePullRequest :: Auth
-> Name Owner
-> Name Repo
-> IssueNumber
-> EditPullRequest
-> IO (Either Error PullRequest)
updatePullRequest auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid epr :: EditPullRequest
epr =
    Auth
-> GenRequest 'MtJSON 'RW PullRequest
-> IO (Either Error PullRequest)
forall am (mt :: MediaType *) a (rw :: RW).
(AuthMethod am, ParseResponse mt a) =>
am -> GenRequest mt rw a -> IO (Either Error a)
executeRequest Auth
auth (GenRequest 'MtJSON 'RW PullRequest
 -> IO (Either Error PullRequest))
-> GenRequest 'MtJSON 'RW PullRequest
-> IO (Either Error PullRequest)
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> IssueNumber
-> EditPullRequest
-> GenRequest 'MtJSON 'RW PullRequest
updatePullRequestR Name Owner
user Name Repo
repo IssueNumber
prid EditPullRequest
epr

-- | Update a pull request.
-- See <https://developer.github.com/v3/pulls/#update-a-pull-request>
updatePullRequestR :: Name Owner
                   -> Name Repo
                   -> IssueNumber
                   -> EditPullRequest
                   -> Request 'RW PullRequest
updatePullRequestR :: Name Owner
-> Name Repo
-> IssueNumber
-> EditPullRequest
-> GenRequest 'MtJSON 'RW PullRequest
updatePullRequestR user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid epr :: EditPullRequest
epr =
    CommandMethod
-> Paths -> ByteString -> GenRequest 'MtJSON 'RW PullRequest
forall a. CommandMethod -> Paths -> ByteString -> Request 'RW a
command CommandMethod
Patch ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "pulls", IssueNumber -> Text
forall a. IsPathPart a => a -> Text
toPathPart IssueNumber
prid] (EditPullRequest -> ByteString
forall a. ToJSON a => a -> ByteString
encode EditPullRequest
epr)

-- | All the commits on a pull request, given the repo owner, repo name, and
-- the number of the pull request.
-- With authentification.
--
-- > pullRequestCommits' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" 688
pullRequestCommits' :: Maybe Auth -> Name Owner -> Name Repo -> IssueNumber -> IO (Either Error (Vector Commit))
pullRequestCommits' :: Maybe Auth
-> Name Owner
-> Name Repo
-> IssueNumber
-> IO (Either Error (Vector Commit))
pullRequestCommits' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid =
    Maybe Auth
-> GenRequest 'MtJSON 'RO (Vector Commit)
-> IO (Either Error (Vector Commit))
forall am (mt :: MediaType *) a.
(AuthMethod am, ParseResponse mt a) =>
Maybe am -> GenRequest mt 'RO a -> IO (Either Error a)
executeRequestMaybe Maybe Auth
auth (GenRequest 'MtJSON 'RO (Vector Commit)
 -> IO (Either Error (Vector Commit)))
-> GenRequest 'MtJSON 'RO (Vector Commit)
-> IO (Either Error (Vector Commit))
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> IssueNumber
-> FetchCount
-> GenRequest 'MtJSON 'RO (Vector Commit)
forall (k :: RW).
Name Owner
-> Name Repo
-> IssueNumber
-> FetchCount
-> Request k (Vector Commit)
pullRequestCommitsR Name Owner
user Name Repo
repo IssueNumber
prid FetchCount
FetchAll

-- | All the commits on a pull request, given the repo owner, repo name, and
-- the number of the pull request.
--
-- > pullRequestCommits "thoughtbot" "paperclip" 688
pullRequestCommitsIO :: Name Owner -> Name Repo -> IssueNumber -> IO (Either Error (Vector Commit))
pullRequestCommitsIO :: Name Owner
-> Name Repo -> IssueNumber -> IO (Either Error (Vector Commit))
pullRequestCommitsIO = Maybe Auth
-> Name Owner
-> Name Repo
-> IssueNumber
-> IO (Either Error (Vector Commit))
pullRequestCommits' Maybe Auth
forall a. Maybe a
Nothing

-- | List commits on a pull request.
-- See <https://developer.github.com/v3/pulls/#list-commits-on-a-pull-request>
pullRequestCommitsR :: Name Owner -> Name Repo -> IssueNumber -> FetchCount -> Request k (Vector Commit)
pullRequestCommitsR :: Name Owner
-> Name Repo
-> IssueNumber
-> FetchCount
-> Request k (Vector Commit)
pullRequestCommitsR user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid =
    Paths -> QueryString -> FetchCount -> Request k (Vector Commit)
forall a (mt :: RW).
FromJSON a =>
Paths -> QueryString -> FetchCount -> Request mt (Vector a)
pagedQuery ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "pulls", IssueNumber -> Text
forall a. IsPathPart a => a -> Text
toPathPart IssueNumber
prid, "commits"] []

-- | The individual files that a pull request patches. Takes the repo owner and
-- name, plus the number assigned to the pull request.
-- With authentification.
--
-- > pullRequestFiles' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" 688
pullRequestFiles' :: Maybe Auth -> Name Owner -> Name Repo -> IssueNumber -> IO (Either Error (Vector File))
pullRequestFiles' :: Maybe Auth
-> Name Owner
-> Name Repo
-> IssueNumber
-> IO (Either Error (Vector File))
pullRequestFiles' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid =
    Maybe Auth
-> GenRequest 'MtJSON 'RO (Vector File)
-> IO (Either Error (Vector File))
forall am (mt :: MediaType *) a.
(AuthMethod am, ParseResponse mt a) =>
Maybe am -> GenRequest mt 'RO a -> IO (Either Error a)
executeRequestMaybe Maybe Auth
auth (GenRequest 'MtJSON 'RO (Vector File)
 -> IO (Either Error (Vector File)))
-> GenRequest 'MtJSON 'RO (Vector File)
-> IO (Either Error (Vector File))
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> IssueNumber
-> FetchCount
-> GenRequest 'MtJSON 'RO (Vector File)
forall (k :: RW).
Name Owner
-> Name Repo
-> IssueNumber
-> FetchCount
-> Request k (Vector File)
pullRequestFilesR Name Owner
user Name Repo
repo IssueNumber
prid FetchCount
FetchAll

-- | The individual files that a pull request patches. Takes the repo owner and
-- name, plus the number assigned to the pull request.
--
-- > pullRequestFiles "thoughtbot" "paperclip" 688
pullRequestFiles :: Name Owner -> Name Repo -> IssueNumber -> IO (Either Error (Vector File))
pullRequestFiles :: Name Owner
-> Name Repo -> IssueNumber -> IO (Either Error (Vector File))
pullRequestFiles = Maybe Auth
-> Name Owner
-> Name Repo
-> IssueNumber
-> IO (Either Error (Vector File))
pullRequestFiles' Maybe Auth
forall a. Maybe a
Nothing

-- | List pull requests files.
-- See <https://developer.github.com/v3/pulls/#list-pull-requests-files>
pullRequestFilesR :: Name Owner -> Name Repo -> IssueNumber -> FetchCount -> Request k (Vector File)
pullRequestFilesR :: Name Owner
-> Name Repo
-> IssueNumber
-> FetchCount
-> Request k (Vector File)
pullRequestFilesR user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid =
    Paths -> QueryString -> FetchCount -> Request k (Vector File)
forall a (mt :: RW).
FromJSON a =>
Paths -> QueryString -> FetchCount -> Request mt (Vector a)
pagedQuery ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "pulls", IssueNumber -> Text
forall a. IsPathPart a => a -> Text
toPathPart IssueNumber
prid, "files"] []

-- | Check if pull request has been merged.
isPullRequestMerged :: Auth -> Name Owner -> Name Repo -> IssueNumber -> IO (Either Error Bool)
isPullRequestMerged :: Auth
-> Name Owner -> Name Repo -> IssueNumber -> IO (Either Error Bool)
isPullRequestMerged auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid =
    Auth -> GenRequest 'MtStatus Any Bool -> IO (Either Error Bool)
forall am (mt :: MediaType *) a (rw :: RW).
(AuthMethod am, ParseResponse mt a) =>
am -> GenRequest mt rw a -> IO (Either Error a)
executeRequest Auth
auth (GenRequest 'MtStatus Any Bool -> IO (Either Error Bool))
-> GenRequest 'MtStatus Any Bool -> IO (Either Error Bool)
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo -> IssueNumber -> GenRequest 'MtStatus Any Bool
forall (rw :: RW).
Name Owner
-> Name Repo -> IssueNumber -> GenRequest 'MtStatus rw Bool
isPullRequestMergedR Name Owner
user Name Repo
repo IssueNumber
prid

-- | Query if a pull request has been merged.
-- See <https://developer.github.com/v3/pulls/#get-if-a-pull-request-has-been-merged>
isPullRequestMergedR :: Name Owner -> Name Repo -> IssueNumber -> GenRequest 'MtStatus rw Bool
isPullRequestMergedR :: Name Owner
-> Name Repo -> IssueNumber -> GenRequest 'MtStatus rw Bool
isPullRequestMergedR user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid =
    Paths -> QueryString -> GenRequest 'MtStatus rw Bool
forall (mt :: MediaType *) (rw :: RW) a.
Paths -> QueryString -> GenRequest mt rw a
Query ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "pulls", IssueNumber -> Text
forall a. IsPathPart a => a -> Text
toPathPart IssueNumber
prid, "merge"] []

-- | Merge a pull request.
mergePullRequest :: Auth -> Name Owner -> Name Repo -> IssueNumber -> Maybe Text -> IO (Either Error MergeResult)
mergePullRequest :: Auth
-> Name Owner
-> Name Repo
-> IssueNumber
-> Maybe Text
-> IO (Either Error MergeResult)
mergePullRequest auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid commitMessage :: Maybe Text
commitMessage =
    Auth
-> GenRequest 'MtStatus 'RW MergeResult
-> IO (Either Error MergeResult)
forall am (mt :: MediaType *) a (rw :: RW).
(AuthMethod am, ParseResponse mt a) =>
am -> GenRequest mt rw a -> IO (Either Error a)
executeRequest Auth
auth (GenRequest 'MtStatus 'RW MergeResult
 -> IO (Either Error MergeResult))
-> GenRequest 'MtStatus 'RW MergeResult
-> IO (Either Error MergeResult)
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> IssueNumber
-> Maybe Text
-> GenRequest 'MtStatus 'RW MergeResult
mergePullRequestR Name Owner
user Name Repo
repo IssueNumber
prid Maybe Text
commitMessage

-- | Merge a pull request (Merge Button).
-- https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button
mergePullRequestR :: Name Owner -> Name Repo -> IssueNumber -> Maybe Text -> GenRequest 'MtStatus 'RW MergeResult
mergePullRequestR :: Name Owner
-> Name Repo
-> IssueNumber
-> Maybe Text
-> GenRequest 'MtStatus 'RW MergeResult
mergePullRequestR user :: Name Owner
user repo :: Name Repo
repo prid :: IssueNumber
prid commitMessage :: Maybe Text
commitMessage =
    CommandMethod
-> Paths -> ByteString -> GenRequest 'MtStatus 'RW MergeResult
forall (mt :: MediaType *) a.
CommandMethod -> Paths -> ByteString -> GenRequest mt 'RW a
Command CommandMethod
Put Paths
paths (Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ Maybe Text -> Value
buildCommitMessageMap Maybe Text
commitMessage)
  where
    paths :: Paths
paths = ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "pulls", IssueNumber -> Text
forall a. IsPathPart a => a -> Text
toPathPart IssueNumber
prid, "merge"]

    buildCommitMessageMap :: Maybe Text -> Value
    buildCommitMessageMap :: Maybe Text -> Value
buildCommitMessageMap (Just msg :: Text
msg) = [Pair] -> Value
object ["commit_message" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
.= Text
msg ]
    buildCommitMessageMap Nothing    = [Pair] -> Value
object []