-----------------------------------------------------------------------------
-- |
-- License     :  BSD-3-Clause
-- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
--
-- The loving comments people have left on Gists, described on
-- <http://developer.github.com/v3/gists/comments/>.
module GitHub.Endpoints.Gists.Comments (
    commentsOn,
    commentsOnR,
    comment,
    gistCommentR,
    module GitHub.Data,
    ) where

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

-- | All the comments on a Gist, given the Gist ID.
--
-- > commentsOn "1174060"
commentsOn :: Name Gist -> IO (Either Error (Vector GistComment))
commentsOn :: Name Gist -> IO (Either Error (Vector GistComment))
commentsOn gid :: Name Gist
gid =
    GenRequest 'MtJSON 'RO (Vector GistComment)
-> IO (Either Error (Vector GistComment))
forall (mt :: MediaType *) a.
ParseResponse mt a =>
GenRequest mt 'RO a -> IO (Either Error a)
executeRequest' (GenRequest 'MtJSON 'RO (Vector GistComment)
 -> IO (Either Error (Vector GistComment)))
-> GenRequest 'MtJSON 'RO (Vector GistComment)
-> IO (Either Error (Vector GistComment))
forall a b. (a -> b) -> a -> b
$ Name Gist
-> FetchCount -> GenRequest 'MtJSON 'RO (Vector GistComment)
forall (k :: RW).
Name Gist -> FetchCount -> Request k (Vector GistComment)
commentsOnR Name Gist
gid FetchCount
FetchAll

-- | List comments on a gist.
-- See <https://developer.github.com/v3/gists/comments/#list-comments-on-a-gist>
commentsOnR :: Name Gist -> FetchCount -> Request k (Vector GistComment)
commentsOnR :: Name Gist -> FetchCount -> Request k (Vector GistComment)
commentsOnR gid :: Name Gist
gid =
    Paths
-> QueryString -> FetchCount -> Request k (Vector GistComment)
forall a (mt :: RW).
FromJSON a =>
Paths -> QueryString -> FetchCount -> Request mt (Vector a)
pagedQuery ["gists", Name Gist -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Gist
gid, "comments"] []

-- | A specific comment, by the comment ID.
--
-- > comment (Id 62449)
comment :: Id GistComment -> IO (Either Error GistComment)
comment :: Id GistComment -> IO (Either Error GistComment)
comment cid :: Id GistComment
cid =
    GenRequest 'MtJSON 'RO GistComment -> IO (Either Error GistComment)
forall (mt :: MediaType *) a.
ParseResponse mt a =>
GenRequest mt 'RO a -> IO (Either Error a)
executeRequest' (GenRequest 'MtJSON 'RO GistComment
 -> IO (Either Error GistComment))
-> GenRequest 'MtJSON 'RO GistComment
-> IO (Either Error GistComment)
forall a b. (a -> b) -> a -> b
$ Id GistComment -> GenRequest 'MtJSON 'RO GistComment
forall (k :: RW). Id GistComment -> Request k GistComment
gistCommentR Id GistComment
cid

-- | Query a single comment.
-- See <https://developer.github.com/v3/gists/comments/#get-a-single-comment>
gistCommentR :: Id GistComment -> Request k GistComment
gistCommentR :: Id GistComment -> Request k GistComment
gistCommentR cid :: Id GistComment
cid =
    Paths -> QueryString -> Request k GistComment
forall (mt :: RW) a. Paths -> QueryString -> Request mt a
query ["gists", "comments", Id GistComment -> Text
forall a. IsPathPart a => a -> Text
toPathPart Id GistComment
cid] []