Maintainer | Brandon Chinn <brandon@leapyear.io> |
---|---|
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Defines GitHubT
and MonadGitHubREST
, a monad transformer and type class that gives a monad m
the capability to query the GitHub REST API.
Synopsis
- class Monad m => MonadGitHubREST m where
- queryGitHubPage :: FromJSON a => GHEndpoint -> m (a, PageLinks)
- queryGitHub :: FromJSON a => GHEndpoint -> m a
- queryGitHubAll :: (FromJSON a, Monoid a) => GHEndpoint -> m a
- queryGitHub_ :: GHEndpoint -> m ()
- queryGitHubPageIO :: FromJSON a => GitHubManager -> GHEndpoint -> IO (a, PageLinks)
- data GitHubManager
- initGitHubManager :: GitHubSettings -> IO GitHubManager
- data GitHubSettings = GitHubSettings {}
- data GitHubT m a
- runGitHubT :: MonadIO m => GitHubSettings -> GitHubT m a -> m a
MonadGitHubREST API
class Monad m => MonadGitHubREST m where Source #
A type class for monads that can query the GitHub REST API.
Example:
-- create the "foo" branch queryGitHub GHEndpoint { method = POST , endpoint = "/repos/:owner/:repo/git/refs" , endpointVals = [ "owner" := "alice" , "repo" := "my-project" ] , ghData = [ "ref" := "refs/heads/foo" , "sha" := "1234567890abcdef" ] }
It's recommended that you create functions for the API endpoints you're using:
deleteBranch branch = queryGitHub GHEndpoint { method = DELETE , endpoint = "/repos/:owner/:repo/git/refs/:ref" , endpointVals = [ "owner" := "alice" , "repo" := "my-project" , "ref" := "heads/" <> branch ] , ghData = [] }
queryGitHubPage :: FromJSON a => GHEndpoint -> m (a, PageLinks) Source #
Query GitHub, returning (payload, links)
if successful, where payload
is the
response that GitHub sent back and links
containing any pagination links GitHub may have
sent back. If the response could not be decoded as JSON, returns
Left (error message, response from server)
.
Errors on network connection failures, if GitHub sent back an error message, or if the response
could not be decoded as JSON. Use githubTry
if you wish to handle GitHub errors.
queryGitHub :: FromJSON a => GHEndpoint -> m a Source #
queryGitHubPage
, except ignoring pagination links.
queryGitHubAll :: (FromJSON a, Monoid a) => GHEndpoint -> m a Source #
Repeatedly calls queryGitHubPage
for each page returned by GitHub and concatenates the
results.
queryGitHub_ :: GHEndpoint -> m () Source #
queryGitHub
, except ignores the result.
Instances
queryGitHubPageIO :: FromJSON a => GitHubManager -> GHEndpoint -> IO (a, PageLinks) Source #
Same as queryGitHubPage
, except explicitly taking in GitHubManager
and running
in IO.
Useful for implementing MonadGitHubREST
outside of GitHubT
.
GitHubManager
data GitHubManager Source #
initGitHubManager :: GitHubSettings -> IO GitHubManager Source #
Initialize a GitHubManager
.
GitHubSettings
data GitHubSettings Source #
GitHubSettings | |
|
GitHubT
A simple monad that can run REST calls.
Instances
MonadTrans GitHubT Source # | |
Defined in GitHub.REST.Monad | |
Monad m => Monad (GitHubT m) Source # | |
Functor m => Functor (GitHubT m) Source # | |
MonadFail m => MonadFail (GitHubT m) Source # | |
Defined in GitHub.REST.Monad | |
Applicative m => Applicative (GitHubT m) Source # | |
MonadIO m => MonadIO (GitHubT m) Source # | |
Defined in GitHub.REST.Monad | |
MonadUnliftIO m => MonadUnliftIO (GitHubT m) Source # | |
Defined in GitHub.REST.Monad | |
MonadIO m => MonadGitHubREST (GitHubT m) Source # | |
Defined in GitHub.REST.Monad queryGitHubPage :: FromJSON a => GHEndpoint -> GitHubT m (a, PageLinks) Source # queryGitHub :: FromJSON a => GHEndpoint -> GitHubT m a Source # queryGitHubAll :: (FromJSON a, Monoid a) => GHEndpoint -> GitHubT m a Source # queryGitHub_ :: GHEndpoint -> GitHubT m () Source # |
runGitHubT :: MonadIO m => GitHubSettings -> GitHubT m a -> m a Source #
Run the given GitHubT
action with the given token and user agent.
The token will be sent with each API request -- see Token
. The user agent is also required for
each API request -- see https://developer.github.com/v3/#user-agent-required.