-----------------------------------------------------------------------------
-- |
-- License     :  BSD-3-Clause
-- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
--
-- The gists API as described at <http://developer.github.com/v3/gists/>.
module GitHub.Endpoints.Gists (
    gists,
    gists',
    gistsR,
    gist,
    gist',
    gistR,
    starGist,
    starGistR,
    unstarGist,
    unstarGistR,
    deleteGist,
    deleteGistR,
    module GitHub.Data,
    ) where

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

-- | The list of all gists created by the user
--
-- > gists' (Just $ BasicAuth "github-username" "github-password") "mike-burns"
gists' :: Maybe Auth -> Name Owner -> IO (Either Error (Vector Gist))
gists' :: Maybe Auth -> Name Owner -> IO (Either Error (Vector Gist))
gists' auth :: Maybe Auth
auth user :: Name Owner
user =
    Maybe Auth
-> GenRequest 'MtJSON 'RO (Vector Gist)
-> IO (Either Error (Vector Gist))
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 Gist)
 -> IO (Either Error (Vector Gist)))
-> GenRequest 'MtJSON 'RO (Vector Gist)
-> IO (Either Error (Vector Gist))
forall a b. (a -> b) -> a -> b
$ Name Owner -> FetchCount -> GenRequest 'MtJSON 'RO (Vector Gist)
forall (k :: RW).
Name Owner -> FetchCount -> Request k (Vector Gist)
gistsR Name Owner
user FetchCount
FetchAll

-- | The list of all public gists created by the user.
--
-- > gists "mike-burns"
gists :: Name Owner -> IO (Either Error (Vector Gist))
gists :: Name Owner -> IO (Either Error (Vector Gist))
gists = Maybe Auth -> Name Owner -> IO (Either Error (Vector Gist))
gists' Maybe Auth
forall a. Maybe a
Nothing

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

-- | A specific gist, given its id, with authentication credentials
--
-- > gist' (Just $ BasicAuth "github-username" "github-password") "225074"
gist' :: Maybe Auth -> Name Gist -> IO (Either Error Gist)
gist' :: Maybe Auth -> Name Gist -> IO (Either Error Gist)
gist' auth :: Maybe Auth
auth gid :: Name Gist
gid =
    Maybe Auth -> GenRequest 'MtJSON 'RO Gist -> IO (Either Error Gist)
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 Gist -> IO (Either Error Gist))
-> GenRequest 'MtJSON 'RO Gist -> IO (Either Error Gist)
forall a b. (a -> b) -> a -> b
$ Name Gist -> GenRequest 'MtJSON 'RO Gist
forall (k :: RW). Name Gist -> Request k Gist
gistR Name Gist
gid

-- | A specific gist, given its id.
--
-- > gist "225074"
gist :: Name Gist -> IO (Either Error Gist)
gist :: Name Gist -> IO (Either Error Gist)
gist = Maybe Auth -> Name Gist -> IO (Either Error Gist)
gist' Maybe Auth
forall a. Maybe a
Nothing

-- | Query a single gist.
-- See <https://developer.github.com/v3/gists/#get-a-single-gist>
gistR :: Name Gist -> Request k Gist
gistR :: Name Gist -> Request k Gist
gistR gid :: Name Gist
gid =
    Paths -> QueryString -> Request k Gist
forall (mt :: RW) a. Paths -> QueryString -> Request mt a
query ["gists", Name Gist -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Gist
gid] []

-- | Star a gist by the authenticated user.
--
-- > starGist (BasicAuth "github-username" "github-password") "225074"
starGist :: Auth -> Name Gist -> IO (Either Error ())
starGist :: Auth -> Name Gist -> IO (Either Error ())
starGist auth :: Auth
auth gid :: Name Gist
gid = 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 Gist -> GenRequest 'MtUnit 'RW ()
starGistR Name Gist
gid

-- | Star a gist by the authenticated user.
-- See <https://developer.github.com/v3/gists/#star-a-gist>
starGistR :: Name Gist -> GenRequest 'MtUnit 'RW ()
starGistR :: Name Gist -> GenRequest 'MtUnit 'RW ()
starGistR gid :: Name Gist
gid = CommandMethod -> Paths -> ByteString -> GenRequest 'MtUnit 'RW ()
forall (mt :: MediaType *) a.
CommandMethod -> Paths -> ByteString -> GenRequest mt 'RW a
Command CommandMethod
Put ["gists", Name Gist -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Gist
gid, "star"] ByteString
forall a. Monoid a => a
mempty

-- | Unstar a gist by the authenticated user.
--
-- > unstarGist (BasicAuth "github-username" "github-password") "225074"
unstarGist :: Auth -> Name Gist -> IO (Either Error ())
unstarGist :: Auth -> Name Gist -> IO (Either Error ())
unstarGist auth :: Auth
auth gid :: Name Gist
gid = 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 Gist -> GenRequest 'MtUnit 'RW ()
unstarGistR Name Gist
gid

-- | Unstar a gist by the authenticated user.
-- See <https://developer.github.com/v3/gists/#unstar-a-gist>
unstarGistR :: Name Gist -> GenRequest 'MtUnit 'RW ()
unstarGistR :: Name Gist -> GenRequest 'MtUnit 'RW ()
unstarGistR gid :: Name Gist
gid = CommandMethod -> Paths -> ByteString -> GenRequest 'MtUnit 'RW ()
forall (mt :: MediaType *) a.
CommandMethod -> Paths -> ByteString -> GenRequest mt 'RW a
Command CommandMethod
Delete ["gists", Name Gist -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Gist
gid, "star"] ByteString
forall a. Monoid a => a
mempty

-- | Delete a gist by the authenticated user.
--
-- > deleteGist (BasicAuth "github-username" "github-password") "225074"
deleteGist :: Auth -> Name Gist -> IO (Either Error ())
deleteGist :: Auth -> Name Gist -> IO (Either Error ())
deleteGist auth :: Auth
auth gid :: Name Gist
gid = 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 Gist -> GenRequest 'MtUnit 'RW ()
deleteGistR Name Gist
gid

-- | Delete a gist by the authenticated user.
-- See <https://developer.github.com/v3/gists/#delete-a-gist>
deleteGistR :: Name Gist -> GenRequest 'MtUnit 'RW ()
deleteGistR :: Name Gist -> GenRequest 'MtUnit 'RW ()
deleteGistR gid :: Name Gist
gid = CommandMethod -> Paths -> ByteString -> GenRequest 'MtUnit 'RW ()
forall (mt :: MediaType *) a.
CommandMethod -> Paths -> ByteString -> GenRequest mt 'RW a
Command CommandMethod
Delete ["gists", Name Gist -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Gist
gid] ByteString
forall a. Monoid a => a
mempty