From eea9a69b48bcd20a9cd14b7acc1ef6c1f2357ed7 Mon Sep 17 00:00:00 2001 From: Max Audron Date: Wed, 6 Jul 2022 12:19:43 +0200 Subject: paginate results from gitlab api --- src/forge/gitlab/mod.rs | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'src/forge/gitlab/mod.rs') diff --git a/src/forge/gitlab/mod.rs b/src/forge/gitlab/mod.rs index dec3b49..cf5fc16 100644 --- a/src/forge/gitlab/mod.rs +++ b/src/forge/gitlab/mod.rs @@ -35,15 +35,35 @@ impl super::ForgeTrait for Gitlab { async fn projects(&self, scope: &str) -> Result> { let query = Projects::build_query(projects::Variables { scope: scope.to_owned(), + after: "".to_owned(), }); - // debug!("query: {:#?}", query); + let res = self.client.graphql::(&query).await?; - let res = res - .projects - .unwrap() - .nodes - .unwrap() + let projects = res.projects.unwrap(); + + let mut page = projects.page_info.end_cursor.unwrap(); + let mut has_next_page = projects.page_info.has_next_page; + + let mut nodes = projects.nodes.unwrap().clone(); + + while has_next_page { + let query = Projects::build_query(projects::Variables { + scope: scope.to_owned(), + after: page, + }); + + let res = self.client.graphql::(&query).await?; + + let projects = res.projects.unwrap(); + + page = projects.page_info.end_cursor.unwrap(); + has_next_page = projects.page_info.has_next_page; + + nodes.append(&mut projects.nodes.unwrap()); + } + + let res = nodes .into_iter() .filter(|x| x.is_some()) .map(|x| x.unwrap().into()) -- cgit v1.2.3