aboutsummaryrefslogtreecommitdiffstats
path: root/src/github.rs
diff options
context:
space:
mode:
authorTeddy Wing2021-05-30 19:14:50 +0200
committerTeddy Wing2021-05-30 19:14:50 +0200
commit59f8634207991d8ce4708da82017b985ee1c0778 (patch)
treea26df0860276e5be38d79188f35ed9bf907a8cd7 /src/github.rs
parent924905eee838bfb9b18cfa981c75dc6229e367b0 (diff)
downloadreflectub-59f8634207991d8ce4708da82017b985ee1c0778.tar.bz2
github::fetch_repos(): Fetch all repos from all pages
Also switch from `reqwest::blocking` to async because I was getting this error, probably because I call `fetch_repos()` in the async 'tokio' function `main()`: thread 'main' panicked at 'Cannot drop a runtime in a context where blocking is not allowed. This happens when a runtime is dropped from within an asynchronous context.', $HOME/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.1/src/runtime/blocking/shutdown.rs:51:21
Diffstat (limited to 'src/github.rs')
-rw-r--r--src/github.rs35
1 files changed, 24 insertions, 11 deletions
diff --git a/src/github.rs b/src/github.rs
index b937f9b..f5598ba 100644
--- a/src/github.rs
+++ b/src/github.rs
@@ -1,4 +1,4 @@
-use reqwest::blocking::ClientBuilder;
+use reqwest::ClientBuilder;
use serde::Deserialize;
use thiserror;
@@ -41,7 +41,7 @@ impl Repo {
}
-pub fn fetch_repos() -> Result<Vec<Repo>, Error> {
+pub async fn fetch_repos() -> Result<Vec<Repo>, Error> {
let mut headers = reqwest::header::HeaderMap::new();
headers.insert("Accept", "application/vnd.github.v3+json".parse()?);
@@ -50,15 +50,28 @@ pub fn fetch_repos() -> Result<Vec<Repo>, Error> {
.default_headers(headers)
.build()?;
- let repos = client.request(
- reqwest::Method::GET,
- format!(
- "https://api.github.com/users/{}/repos",
- "teddywing",
- ),
- )
- .send()?
- .json::<Vec<Repo>>()?;
+ let mut repos = Vec::new();
+
+ for i in 1.. {
+ let repo_page = client.request(
+ reqwest::Method::GET,
+ format!(
+ "https://api.github.com/users/{}/repos?page={}&per_page=100",
+ "teddywing",
+ i,
+ ),
+ )
+ .send()
+ .await?
+ .json::<Vec<Repo>>()
+ .await?;
+
+ if repo_page.is_empty() {
+ break;
+ }
+
+ repos.extend(repo_page);
+ }
Ok(repos)
}