github_email/methods/
mod.rs1use std::{collections::HashSet, str::FromStr};
2
3use reqwest::{header::USER_AGENT, Client};
4use serde_json::Value;
5
6use crate::{authors::AuthorQuery, Authors, CommitAuthor, GithubError, Result};
7
8pub mod by_network_events;
9pub mod by_repo_events;
10pub mod by_user_events;
11
12fn read_payload(event: &Value, count: &mut Authors) -> Option<()> {
13 let payload = event.as_object()?.get("payload")?.as_object()?;
14 let commits = payload.get("commits")?.as_array()?;
15 for commit in commits {
16 match read_commit(commit) {
17 Some(s) => count.insert(s),
18 None => continue,
19 }
20 }
21 Some(())
22}
23
24fn read_commit(commit: &Value) -> Option<CommitAuthor> {
25 let author = commit.as_object()?.get("author")?.as_object()?;
26 let name = author.get("name")?.as_str()?.to_string();
27 let email = author.get("email")?.as_str()?.to_string();
28 Some(CommitAuthor { name, email, count: 1 })
29}
30
31pub fn parse_queries(urls: &str) -> HashSet<AuthorQuery> {
32 let mut out = HashSet::default();
33 for x in urls.lines() {
34 let query = AuthorQuery::from(x);
35 if query.is_some() {
36 out.insert(query);
37 }
38 }
39 out
40}