github_email/methods/
mod.rs

1use 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}