Przeglądaj źródła

Add iteration over repos vector

Sladyn Nunes 4 lat temu
rodzic
commit
d32f837b2a
1 zmienionych plików z 78 dodań i 67 usunięć
  1. 78 67
      src/actions.rs

+ 78 - 67
src/actions.rs

@@ -18,7 +18,7 @@ pub struct Step<'a> {
 }
 
 pub struct Query<'a> {
-    pub repo: &'a str,
+    pub repos: Vec<&'a str>,
     pub queries: Vec<QueryMap<'a>>,
 }
 
@@ -57,77 +57,88 @@ impl<'a> Action for Step<'a> {
         let mut context = Context::new();
         let mut results = HashMap::new();
 
-        for Query { repo, queries } in &self.actions {
-            let repository = Repository {
-                full_name: repo.to_string(),
-            };
-
-            for QueryMap { name, query } in queries {
-                match query.kind {
-                    github::QueryKind::List => {
-                        let issues_search_result = repository.get_issues(&gh, &query).await;
-
-                        match issues_search_result {
-                            Ok(issues) => {
-                                let issues_decorator: Vec<_> = issues
-                                    .iter()
-                                    .map(|issue| IssueDecorator {
-                                        title: issue.title.clone(),
-                                        number: issue.number,
-                                        html_url: issue.html_url.clone(),
-                                        repo_name: repository
-                                            .full_name
-                                            .split("/")
-                                            .last()
-                                            .expect("Failed to split repository name")
-                                            .to_string(),
-                                        labels: issue
-                                            .labels
-                                            .iter()
-                                            .map(|l| l.name.as_ref())
-                                            .collect::<Vec<_>>()
-                                            .join(", "),
-                                        assignees: issue
-                                            .assignees
-                                            .iter()
-                                            .map(|u| u.login.as_ref())
-                                            .collect::<Vec<_>>()
-                                            .join(", "),
-                                    })
-                                    .collect();
-
-                                results
-                                    .entry(*name)
-                                    .or_insert(Vec::new())
-                                    .extend(issues_decorator);
-                            }
-                            Err(err) => {
-                                eprintln!("ERROR: {}", err);
-                                err.chain()
-                                    .skip(1)
-                                    .for_each(|cause| eprintln!("because: {}", cause));
-                                std::process::exit(1);
-                            }
-                        }
-                    }
+        /*
+         let mut actions = Vec::new();
+        actions.push(Query {
+            repos,
+            queries
+        });
+        */
+
+        for Query { repos, queries} in &self.actions {
 
-                    github::QueryKind::Count => {
-                        let count = repository.get_issues_count(&gh, &query).await;
+            for repo in repos.iter() {
+                let repository = Repository {
+                    full_name: repo.to_string(),
+                };
 
-                        match count {
-                            Ok(count) => {
-                                context.insert(*name, &count);
+                for QueryMap { name, query } in queries {
+                    match query.kind {
+                        github::QueryKind::List => {
+                            let issues_search_result = repository.get_issues(&gh, &query).await;
+
+                            match issues_search_result {
+                                Ok(issues) => {
+                                    let issues_decorator: Vec<_> = issues
+                                        .iter()
+                                        .map(|issue| IssueDecorator {
+                                            title: issue.title.clone(),
+                                            number: issue.number,
+                                            html_url: issue.html_url.clone(),
+                                            repo_name: repository
+                                                .full_name
+                                                .split("/")
+                                                .last()
+                                                .expect("Failed to split repository name")
+                                                .to_string(),
+                                            labels: issue
+                                                .labels
+                                                .iter()
+                                                .map(|l| l.name.as_ref())
+                                                .collect::<Vec<_>>()
+                                                .join(", "),
+                                            assignees: issue
+                                                .assignees
+                                                .iter()
+                                                .map(|u| u.login.as_ref())
+                                                .collect::<Vec<_>>()
+                                                .join(", "),
+                                        })
+                                        .collect();
+
+                                    results
+                                        .entry(*name)
+                                        .or_insert(Vec::new())
+                                        .extend(issues_decorator);
+                                }
+                                Err(err) => {
+                                    eprintln!("ERROR: {}", err);
+                                    err.chain()
+                                        .skip(1)
+                                        .for_each(|cause| eprintln!("because: {}", cause));
+                                    std::process::exit(1);
+                                }
                             }
-                            Err(err) => {
-                                eprintln!("ERROR: {}", err);
-                                err.chain()
-                                    .skip(1)
-                                    .for_each(|cause| eprintln!("because: {}", cause));
-                                std::process::exit(1);
+                        }
+
+                        github::QueryKind::Count => {
+                            let count = repository.get_issues_count(&gh, &query).await;
+
+                            match count {
+                                Ok(count) => {
+                                    context.insert(*name, &count);
+                                }
+                                Err(err) => {
+                                    eprintln!("ERROR: {}", err);
+                                    err.chain()
+                                        .skip(1)
+                                        .for_each(|cause| eprintln!("because: {}", cause));
+                                    std::process::exit(1);
+                                }
                             }
                         }
-                    }
-                };
+                    };
+                }
             }
         }