-----------------------------------------------------------------------------
-- |
-- License     :  BSD-3-Clause
-- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
--
-- The Github Search API, as described at
-- <http://developer.github.com/v3/search/>.
module GitHub.Endpoints.Search(
    searchRepos',
    searchRepos,
    searchReposR,
    searchCode',
    searchCode,
    searchCodeR,
    searchIssues',
    searchIssues,
    searchIssuesR,
    module GitHub.Data,
    ) where

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

import qualified Data.Text.Encoding as TE

-- | Perform a repository search.
-- With authentication.
--
-- > searchRepos' (Just $ BasicAuth "github-username" "github-password') "a in%3Aname language%3Ahaskell created%3A>2013-10-01&per_page=100"
searchRepos' :: Maybe Auth -> Text -> IO (Either Error (SearchResult Repo))
searchRepos' :: Maybe Auth -> Text -> IO (Either Error (SearchResult Repo))
searchRepos' auth :: Maybe Auth
auth = Maybe Auth
-> GenRequest 'MtJSON 'RO (SearchResult Repo)
-> IO (Either Error (SearchResult Repo))
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 (SearchResult Repo)
 -> IO (Either Error (SearchResult Repo)))
-> (Text -> GenRequest 'MtJSON 'RO (SearchResult Repo))
-> Text
-> IO (Either Error (SearchResult Repo))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> GenRequest 'MtJSON 'RO (SearchResult Repo)
forall (k :: RW). Text -> Request k (SearchResult Repo)
searchReposR

-- | Perform a repository search.
-- Without authentication.
--
-- > searchRepos "q=a in%3Aname language%3Ahaskell created%3A>2013-10-01&per_page=100"
searchRepos :: Text -> IO (Either Error (SearchResult Repo))
searchRepos :: Text -> IO (Either Error (SearchResult Repo))
searchRepos = Maybe Auth -> Text -> IO (Either Error (SearchResult Repo))
searchRepos' Maybe Auth
forall a. Maybe a
Nothing

-- | Search repositories.
-- See <https://developer.github.com/v3/search/#search-repositories>
searchReposR :: Text -> Request k (SearchResult Repo)
searchReposR :: Text -> Request k (SearchResult Repo)
searchReposR searchString :: Text
searchString =
    Paths -> QueryString -> Request k (SearchResult Repo)
forall (mt :: RW) a. Paths -> QueryString -> Request mt a
query ["search", "repositories"] [("q", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString) -> ByteString -> Maybe ByteString
forall a b. (a -> b) -> a -> b
$ Text -> ByteString
TE.encodeUtf8 Text
searchString)]

-- | Perform a code search.
-- With authentication.
--
-- > searchCode' (Just $ BasicAuth "github-username" "github-password') "a in%3Aname language%3Ahaskell created%3A>2013-10-01&per_page=100"
searchCode' :: Maybe Auth -> Text -> IO (Either Error (SearchResult Code))
searchCode' :: Maybe Auth -> Text -> IO (Either Error (SearchResult Code))
searchCode' auth :: Maybe Auth
auth = Maybe Auth
-> GenRequest 'MtJSON 'RO (SearchResult Code)
-> IO (Either Error (SearchResult Code))
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 (SearchResult Code)
 -> IO (Either Error (SearchResult Code)))
-> (Text -> GenRequest 'MtJSON 'RO (SearchResult Code))
-> Text
-> IO (Either Error (SearchResult Code))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> GenRequest 'MtJSON 'RO (SearchResult Code)
forall (k :: RW). Text -> Request k (SearchResult Code)
searchCodeR

-- | Perform a code search.
-- Without authentication.
--
-- > searchCode "q=addClass+in:file+language:js+repo:jquery/jquery"
searchCode :: Text -> IO (Either Error (SearchResult Code))
searchCode :: Text -> IO (Either Error (SearchResult Code))
searchCode = Maybe Auth -> Text -> IO (Either Error (SearchResult Code))
searchCode' Maybe Auth
forall a. Maybe a
Nothing

-- | Search code.
-- See <https://developer.github.com/v3/search/#search-code>
searchCodeR :: Text -> Request k (SearchResult Code)
searchCodeR :: Text -> Request k (SearchResult Code)
searchCodeR searchString :: Text
searchString =
    Paths -> QueryString -> Request k (SearchResult Code)
forall (mt :: RW) a. Paths -> QueryString -> Request mt a
query ["search", "code"] [("q", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString) -> ByteString -> Maybe ByteString
forall a b. (a -> b) -> a -> b
$ Text -> ByteString
TE.encodeUtf8 Text
searchString)]

-- | Perform an issue search.
-- With authentication.
--
-- > searchIssues' (Just $ BasicAuth "github-username" "github-password') "a repo%3Aphadej%2Fgithub&per_page=100"
searchIssues' :: Maybe Auth -> Text -> IO (Either Error (SearchResult Issue))
searchIssues' :: Maybe Auth -> Text -> IO (Either Error (SearchResult Issue))
searchIssues' auth :: Maybe Auth
auth = Maybe Auth
-> GenRequest 'MtJSON 'RO (SearchResult Issue)
-> IO (Either Error (SearchResult Issue))
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 (SearchResult Issue)
 -> IO (Either Error (SearchResult Issue)))
-> (Text -> GenRequest 'MtJSON 'RO (SearchResult Issue))
-> Text
-> IO (Either Error (SearchResult Issue))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> GenRequest 'MtJSON 'RO (SearchResult Issue)
forall (k :: RW). Text -> Request k (SearchResult Issue)
searchIssuesR

-- | Perform an issue search.
-- Without authentication.
--
-- > searchIssues "q=a repo%3Aphadej%2Fgithub&per_page=100"
searchIssues :: Text -> IO (Either Error (SearchResult Issue))
searchIssues :: Text -> IO (Either Error (SearchResult Issue))
searchIssues = Maybe Auth -> Text -> IO (Either Error (SearchResult Issue))
searchIssues' Maybe Auth
forall a. Maybe a
Nothing

-- | Search issues.
-- See <https://developer.github.com/v3/search/#search-issues>
searchIssuesR :: Text -> Request k (SearchResult Issue)
searchIssuesR :: Text -> Request k (SearchResult Issue)
searchIssuesR searchString :: Text
searchString =
    Paths -> QueryString -> Request k (SearchResult Issue)
forall (mt :: RW) a. Paths -> QueryString -> Request mt a
query ["search", "issues"] [("q", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString) -> ByteString -> Maybe ByteString
forall a b. (a -> b) -> a -> b
$ Text -> ByteString
TE.encodeUtf8 Text
searchString)]