-----------------------------------------------------------------------------
-- |
-- License     :  BSD-3-Clause
-- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
--
-- The Github issue events API, which is described on
-- <http://developer.github.com/v3/issues/events/>
module GitHub.Endpoints.Issues.Events (
    eventsForIssue,
    eventsForIssue',
    eventsForIssueR,
    eventsForRepo,
    eventsForRepo',
    eventsForRepoR,
    event,
    event',
    eventR,
    module GitHub.Data,
    ) where

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

-- | All events that have happened on an issue.
--
-- > eventsForIssue "thoughtbot" "paperclip" 49
eventsForIssue :: Name Owner -> Name Repo -> Id Issue -> IO (Either Error (Vector IssueEvent))
eventsForIssue :: Name Owner
-> Name Repo -> Id Issue -> IO (Either Error (Vector IssueEvent))
eventsForIssue = Maybe Auth
-> Name Owner
-> Name Repo
-> Id Issue
-> IO (Either Error (Vector IssueEvent))
eventsForIssue' Maybe Auth
forall a. Maybe a
Nothing

-- | All events that have happened on an issue, using authentication.
--
-- > eventsForIssue' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" 49
eventsForIssue' :: Maybe Auth -> Name Owner -> Name Repo -> Id Issue -> IO (Either Error (Vector IssueEvent))
eventsForIssue' :: Maybe Auth
-> Name Owner
-> Name Repo
-> Id Issue
-> IO (Either Error (Vector IssueEvent))
eventsForIssue' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo iid :: Id Issue
iid =
    Maybe Auth
-> GenRequest 'MtJSON 'RO (Vector IssueEvent)
-> IO (Either Error (Vector IssueEvent))
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 IssueEvent)
 -> IO (Either Error (Vector IssueEvent)))
-> GenRequest 'MtJSON 'RO (Vector IssueEvent)
-> IO (Either Error (Vector IssueEvent))
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> Id Issue
-> FetchCount
-> GenRequest 'MtJSON 'RO (Vector IssueEvent)
forall (k :: RW).
Name Owner
-> Name Repo
-> Id Issue
-> FetchCount
-> Request k (Vector IssueEvent)
eventsForIssueR Name Owner
user Name Repo
repo Id Issue
iid FetchCount
FetchAll

-- | List events for an issue.
-- See <https://developer.github.com/v3/issues/events/#list-events-for-an-issue>
eventsForIssueR :: Name Owner -> Name Repo -> Id Issue -> FetchCount -> Request k (Vector IssueEvent)
eventsForIssueR :: Name Owner
-> Name Repo
-> Id Issue
-> FetchCount
-> Request k (Vector IssueEvent)
eventsForIssueR user :: Name Owner
user repo :: Name Repo
repo iid :: Id Issue
iid =
    Paths -> QueryString -> FetchCount -> Request k (Vector IssueEvent)
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, "issues", Id Issue -> Text
forall a. IsPathPart a => a -> Text
toPathPart Id Issue
iid, "events"] []

-- | All the events for all issues in a repo.
--
-- > eventsForRepo "thoughtbot" "paperclip"
eventsForRepo :: Name Owner -> Name Repo -> IO (Either Error (Vector IssueEvent))
eventsForRepo :: Name Owner -> Name Repo -> IO (Either Error (Vector IssueEvent))
eventsForRepo = Maybe Auth
-> Name Owner -> Name Repo -> IO (Either Error (Vector IssueEvent))
eventsForRepo' Maybe Auth
forall a. Maybe a
Nothing

-- | All the events for all issues in a repo, using authentication.
--
-- > eventsForRepo' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip"
eventsForRepo' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector IssueEvent))
eventsForRepo' :: Maybe Auth
-> Name Owner -> Name Repo -> IO (Either Error (Vector IssueEvent))
eventsForRepo' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo =
    Maybe Auth
-> GenRequest 'MtJSON 'RO (Vector IssueEvent)
-> IO (Either Error (Vector IssueEvent))
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 IssueEvent)
 -> IO (Either Error (Vector IssueEvent)))
-> GenRequest 'MtJSON 'RO (Vector IssueEvent)
-> IO (Either Error (Vector IssueEvent))
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> FetchCount
-> GenRequest 'MtJSON 'RO (Vector IssueEvent)
forall (k :: RW).
Name Owner
-> Name Repo -> FetchCount -> Request k (Vector IssueEvent)
eventsForRepoR Name Owner
user Name Repo
repo FetchCount
FetchAll

-- | List events for a repository.
-- See <https://developer.github.com/v3/issues/events/#list-events-for-a-repository>
eventsForRepoR :: Name Owner -> Name Repo -> FetchCount -> Request k (Vector IssueEvent)
eventsForRepoR :: Name Owner
-> Name Repo -> FetchCount -> Request k (Vector IssueEvent)
eventsForRepoR user :: Name Owner
user repo :: Name Repo
repo =
    Paths -> QueryString -> FetchCount -> Request k (Vector IssueEvent)
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, "issues", "events"] []

-- | Details on a specific event, by the event's ID.
--
-- > event "thoughtbot" "paperclip" 5335772
event :: Name Owner -> Name Repo -> Id IssueEvent -> IO (Either Error IssueEvent)
event :: Name Owner
-> Name Repo -> Id IssueEvent -> IO (Either Error IssueEvent)
event = Maybe Auth
-> Name Owner
-> Name Repo
-> Id IssueEvent
-> IO (Either Error IssueEvent)
event' Maybe Auth
forall a. Maybe a
Nothing

-- | Details on a specific event, by the event's ID, using authentication.
--
-- > event' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" 5335772
event' :: Maybe Auth -> Name Owner -> Name Repo -> Id IssueEvent -> IO (Either Error IssueEvent)
event' :: Maybe Auth
-> Name Owner
-> Name Repo
-> Id IssueEvent
-> IO (Either Error IssueEvent)
event' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo eid :: Id IssueEvent
eid =
    Maybe Auth
-> GenRequest 'MtJSON 'RO IssueEvent
-> IO (Either Error IssueEvent)
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 IssueEvent -> IO (Either Error IssueEvent))
-> GenRequest 'MtJSON 'RO IssueEvent
-> IO (Either Error IssueEvent)
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo -> Id IssueEvent -> GenRequest 'MtJSON 'RO IssueEvent
forall (k :: RW).
Name Owner -> Name Repo -> Id IssueEvent -> Request k IssueEvent
eventR Name Owner
user Name Repo
repo Id IssueEvent
eid

-- | Query a single event.
-- See <https://developer.github.com/v3/issues/events/#get-a-single-event>
eventR :: Name Owner -> Name Repo -> Id IssueEvent -> Request k IssueEvent
eventR :: Name Owner -> Name Repo -> Id IssueEvent -> Request k IssueEvent
eventR user :: Name Owner
user repo :: Name Repo
repo eid :: Id IssueEvent
eid =
    Paths -> QueryString -> Request k IssueEvent
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, "issues", "events", Id IssueEvent -> Text
forall a. IsPathPart a => a -> Text
toPathPart Id IssueEvent
eid] []