-----------------------------------------------------------------------------
-- |
-- License     :  BSD-3-Clause
-- Maintainer  :  Todd Mohney <toddmohney@gmail.com>
--
-- The deploy keys API, as described at
-- <https://developer.github.com/v3/repos/keys>
module GitHub.Endpoints.Repos.DeployKeys (
    -- * Querying deploy keys
    deployKeysFor',
    deployKeysForR,
    deployKeyFor',
    deployKeyForR,

    -- ** Create
    createRepoDeployKey',
    createRepoDeployKeyR,

    -- ** Delete
    deleteRepoDeployKey',
    deleteRepoDeployKeyR,
) where

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

-- | Querying deploy keys.
deployKeysFor' :: Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector RepoDeployKey))
deployKeysFor' :: Auth
-> Name Owner
-> Name Repo
-> IO (Either Error (Vector RepoDeployKey))
deployKeysFor' auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo =
    Auth
-> GenRequest 'MtJSON 'RA (Vector RepoDeployKey)
-> IO (Either Error (Vector RepoDeployKey))
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 'RA (Vector RepoDeployKey)
 -> IO (Either Error (Vector RepoDeployKey)))
-> GenRequest 'MtJSON 'RA (Vector RepoDeployKey)
-> IO (Either Error (Vector RepoDeployKey))
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> FetchCount
-> GenRequest 'MtJSON 'RA (Vector RepoDeployKey)
deployKeysForR Name Owner
user Name Repo
repo FetchCount
FetchAll

-- | Querying deploy keys.
-- See <https://developer.github.com/v3/repos/keys/#list-deploy-keys>
deployKeysForR :: Name Owner -> Name Repo -> FetchCount -> Request 'RA (Vector RepoDeployKey)
deployKeysForR :: Name Owner
-> Name Repo
-> FetchCount
-> GenRequest 'MtJSON 'RA (Vector RepoDeployKey)
deployKeysForR user :: Name Owner
user repo :: Name Repo
repo =
    Paths
-> QueryString
-> FetchCount
-> GenRequest 'MtJSON 'RA (Vector RepoDeployKey)
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, "keys"] []

-- | Querying a deploy key
deployKeyFor' :: Auth -> Name Owner -> Name Repo -> Id RepoDeployKey -> IO (Either Error RepoDeployKey)
deployKeyFor' :: Auth
-> Name Owner
-> Name Repo
-> Id RepoDeployKey
-> IO (Either Error RepoDeployKey)
deployKeyFor' auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo keyId :: Id RepoDeployKey
keyId =
    Auth
-> GenRequest 'MtJSON 'RA RepoDeployKey
-> IO (Either Error RepoDeployKey)
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 'RA RepoDeployKey
 -> IO (Either Error RepoDeployKey))
-> GenRequest 'MtJSON 'RA RepoDeployKey
-> IO (Either Error RepoDeployKey)
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> Id RepoDeployKey
-> GenRequest 'MtJSON 'RA RepoDeployKey
deployKeyForR Name Owner
user Name Repo
repo Id RepoDeployKey
keyId

-- | Querying a deploy key.
-- See <https://developer.github.com/v3/repos/keys/#get-a-deploy-key>
deployKeyForR :: Name Owner -> Name Repo -> Id RepoDeployKey -> Request 'RA RepoDeployKey
deployKeyForR :: Name Owner
-> Name Repo
-> Id RepoDeployKey
-> GenRequest 'MtJSON 'RA RepoDeployKey
deployKeyForR user :: Name Owner
user repo :: Name Repo
repo keyId :: Id RepoDeployKey
keyId =
    Paths -> QueryString -> GenRequest 'MtJSON 'RA RepoDeployKey
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, "keys", Id RepoDeployKey -> Text
forall a. IsPathPart a => a -> Text
toPathPart Id RepoDeployKey
keyId] []

-- | Create a deploy key
createRepoDeployKey' :: Auth -> Name Owner -> Name Repo -> NewRepoDeployKey -> IO (Either Error RepoDeployKey)
createRepoDeployKey' :: Auth
-> Name Owner
-> Name Repo
-> NewRepoDeployKey
-> IO (Either Error RepoDeployKey)
createRepoDeployKey' auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo key :: NewRepoDeployKey
key =
    Auth
-> GenRequest 'MtJSON 'RW RepoDeployKey
-> IO (Either Error RepoDeployKey)
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 RepoDeployKey
 -> IO (Either Error RepoDeployKey))
-> GenRequest 'MtJSON 'RW RepoDeployKey
-> IO (Either Error RepoDeployKey)
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> NewRepoDeployKey
-> GenRequest 'MtJSON 'RW RepoDeployKey
createRepoDeployKeyR Name Owner
user Name Repo
repo NewRepoDeployKey
key

-- | Create a deploy key.
-- See <https://developer.github.com/v3/repos/keys/#add-a-new-deploy-key>.
createRepoDeployKeyR :: Name Owner -> Name Repo -> NewRepoDeployKey -> Request 'RW RepoDeployKey
createRepoDeployKeyR :: Name Owner
-> Name Repo
-> NewRepoDeployKey
-> GenRequest 'MtJSON 'RW RepoDeployKey
createRepoDeployKeyR user :: Name Owner
user repo :: Name Repo
repo key :: NewRepoDeployKey
key =
    CommandMethod
-> Paths -> ByteString -> GenRequest 'MtJSON 'RW RepoDeployKey
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, "keys"] (NewRepoDeployKey -> ByteString
forall a. ToJSON a => a -> ByteString
encode NewRepoDeployKey
key)

deleteRepoDeployKey' :: Auth -> Name Owner -> Name Repo -> Id RepoDeployKey -> IO (Either Error ())
deleteRepoDeployKey' :: Auth
-> Name Owner
-> Name Repo
-> Id RepoDeployKey
-> IO (Either Error ())
deleteRepoDeployKey' auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo keyId :: Id RepoDeployKey
keyId =
    Auth -> GenRequest 'MtUnit 'RW () -> IO (Either Error ())
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 'MtUnit 'RW () -> IO (Either Error ()))
-> GenRequest 'MtUnit 'RW () -> IO (Either Error ())
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo -> Id RepoDeployKey -> GenRequest 'MtUnit 'RW ()
deleteRepoDeployKeyR Name Owner
user Name Repo
repo Id RepoDeployKey
keyId

-- | Delete a deploy key.
-- See <https://developer.github.com/v3/repos/keys/#remove-a-deploy-key>
deleteRepoDeployKeyR :: Name Owner -> Name Repo -> Id RepoDeployKey -> GenRequest 'MtUnit 'RW ()
deleteRepoDeployKeyR :: Name Owner
-> Name Repo -> Id RepoDeployKey -> GenRequest 'MtUnit 'RW ()
deleteRepoDeployKeyR user :: Name Owner
user repo :: Name Repo
repo keyId :: Id RepoDeployKey
keyId =
    CommandMethod -> Paths -> ByteString -> GenRequest 'MtUnit 'RW ()
forall (mt :: MediaType *) a.
CommandMethod -> Paths -> ByteString -> GenRequest mt 'RW a
Command CommandMethod
Delete ["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, "keys", Id RepoDeployKey -> Text
forall a. IsPathPart a => a -> Text
toPathPart Id RepoDeployKey
keyId] ByteString
forall a. Monoid a => a
mempty