-----------------------------------------------------------------------------
-- |
-- License     :  BSD-3-Clause
-- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
--
-- The Github Users API, as described at
-- <http://developer.github.com/v3/users/>.
module GitHub.Endpoints.Users (
    userInfoFor,
    userInfoFor',
    userInfoForR,
    ownerInfoForR,
    userInfoCurrent',
    userInfoCurrentR,
    module GitHub.Data,
    ) where

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

-- | The information for a single user, by login name.
-- With authentification
--
-- > userInfoFor' (Just $ BasicAuth "github-username" "github-password") "mike-burns"
userInfoFor' :: Maybe Auth -> Name User -> IO (Either Error User)
userInfoFor' :: Maybe Auth -> Name User -> IO (Either Error User)
userInfoFor' auth :: Maybe Auth
auth = Maybe Auth -> GenRequest 'MtJSON 'RO User -> IO (Either Error User)
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 User -> IO (Either Error User))
-> (Name User -> GenRequest 'MtJSON 'RO User)
-> Name User
-> IO (Either Error User)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Name User -> GenRequest 'MtJSON 'RO User
forall (k :: RW). Name User -> Request k User
userInfoForR

-- | The information for a single user, by login name.
--
-- > userInfoFor "mike-burns"
userInfoFor :: Name User -> IO (Either Error User)
userInfoFor :: Name User -> IO (Either Error User)
userInfoFor = GenRequest 'MtJSON 'RO User -> IO (Either Error User)
forall (mt :: MediaType *) a.
ParseResponse mt a =>
GenRequest mt 'RO a -> IO (Either Error a)
executeRequest' (GenRequest 'MtJSON 'RO User -> IO (Either Error User))
-> (Name User -> GenRequest 'MtJSON 'RO User)
-> Name User
-> IO (Either Error User)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Name User -> GenRequest 'MtJSON 'RO User
forall (k :: RW). Name User -> Request k User
userInfoForR

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

-- | Query a single user or an organization.
-- See <https://developer.github.com/v3/users/#get-a-single-user>
ownerInfoForR :: Name Owner -> Request k Owner
ownerInfoForR :: Name Owner -> Request k Owner
ownerInfoForR owner :: Name Owner
owner = Paths -> QueryString -> Request k Owner
forall (mt :: RW) a. Paths -> QueryString -> Request mt a
query ["users", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
owner] []

-- | Retrieve information about the user associated with the supplied authentication.
--
-- > userInfoCurrent' (OAuth "...")
userInfoCurrent' :: Auth -> IO (Either Error User)
userInfoCurrent' :: Auth -> IO (Either Error User)
userInfoCurrent' auth :: Auth
auth =
    Auth -> GenRequest 'MtJSON 'RA User -> IO (Either Error User)
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 User -> IO (Either Error User))
-> GenRequest 'MtJSON 'RA User -> IO (Either Error User)
forall a b. (a -> b) -> a -> b
$ GenRequest 'MtJSON 'RA User
userInfoCurrentR

-- | Query the authenticated user.
-- See <https://developer.github.com/v3/users/#get-the-authenticated-user>
userInfoCurrentR :: Request 'RA User
userInfoCurrentR :: GenRequest 'MtJSON 'RA User
userInfoCurrentR = Paths -> QueryString -> GenRequest 'MtJSON 'RA User
forall (mt :: RW) a. Paths -> QueryString -> Request mt a
query ["user"] []