Skip to content

Commit 11332ed

Browse files
committed
Add paginated searches
1 parent 81d9b65 commit 11332ed

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

src/GitHub/Data/Search.hs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,27 @@ import Prelude ()
1212

1313
import qualified Data.Vector as V
1414

15-
data SearchResult entity = SearchResult
15+
data SearchResult' entities = SearchResult
1616
{ searchResultTotalCount :: !Int
17-
, searchResultResults :: !(Vector entity)
17+
, searchResultResults :: !entities
1818
}
1919
deriving (Show, Data, Typeable, Eq, Ord, Generic)
2020

21-
instance NFData entity => NFData (SearchResult entity) where rnf = genericRnf
22-
instance Binary entity => Binary (SearchResult entity)
21+
type SearchResult entity = SearchResult' (V.Vector entity)
2322

24-
instance FromJSON entity => FromJSON (SearchResult entity) where
23+
instance NFData entities => NFData (SearchResult' entities) where rnf = genericRnf
24+
instance Binary entities => Binary (SearchResult' entities)
25+
26+
instance (Monoid entities, FromJSON entities) => FromJSON (SearchResult' entities) where
2527
parseJSON = withObject "SearchResult" $ \o -> SearchResult
2628
<$> o .: "total_count"
27-
<*> o .:? "items" .!= V.empty
29+
<*> o .:? "items" .!= mempty
30+
31+
instance Semigroup res => Semigroup (SearchResult' res) where
32+
(SearchResult count res) <> (SearchResult count' res') = SearchResult (max count count') (res <> res')
33+
34+
instance Foldable SearchResult' where
35+
foldMap f (SearchResult count results) = f results
2836

2937
data Code = Code
3038
{ codeName :: !Text

src/GitHub/Endpoints/Search.hs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,24 @@ import qualified Data.Text.Encoding as TE
2121

2222
-- | Search repositories.
2323
-- See <https://developer.github.com/v3/search/#search-repositories>
24-
searchReposR :: Text -> Request k (SearchResult Repo)
24+
searchReposR :: Text -> FetchCount -> Request k (SearchResult Repo)
2525
searchReposR searchString =
26-
query ["search", "repositories"] [("q", Just $ TE.encodeUtf8 searchString)]
26+
PagedQuery ["search", "repositories"] [("q", Just $ TE.encodeUtf8 searchString)]
2727

2828
-- | Search code.
2929
-- See <https://developer.github.com/v3/search/#search-code>
30-
searchCodeR :: Text -> Request k (SearchResult Code)
30+
searchCodeR :: Text -> FetchCount -> Request k (SearchResult Code)
3131
searchCodeR searchString =
32-
query ["search", "code"] [("q", Just $ TE.encodeUtf8 searchString)]
32+
PagedQuery ["search", "code"] [("q", Just $ TE.encodeUtf8 searchString)]
3333

3434
-- | Search issues.
3535
-- See <https://developer.github.com/v3/search/#search-issues>
36-
searchIssuesR :: Text -> Request k (SearchResult Issue)
36+
searchIssuesR :: Text -> FetchCount -> Request k (SearchResult Issue)
3737
searchIssuesR searchString =
38-
query ["search", "issues"] [("q", Just $ TE.encodeUtf8 searchString)]
38+
PagedQuery ["search", "issues"] [("q", Just $ TE.encodeUtf8 searchString)]
3939

4040
-- | Search users.
4141
-- See <https://developer.github.com/v3/search/#search-code>
42-
searchUsersR :: Text -> Request k (SearchResult SimpleUser)
42+
searchUsersR :: Text -> FetchCount -> Request k (SearchResult SimpleUser)
4343
searchUsersR searchString =
44-
query ["search", "users"] [("q", Just $ TE.encodeUtf8 searchString)]
44+
PagedQuery ["search", "users"] [("q", Just $ TE.encodeUtf8 searchString)]

0 commit comments

Comments
 (0)