use github_rs::client::{Executor, Github};
use github_rs::{HeaderMap, StatusCode};
use hyper::header::{HeaderValue, ACCEPT};
use serde_json::Value;
fn main() {
let client = Github::new("API TOKEN").expect("failed to create client");
let owner = "rust-lang";
let repo_name = "rfcs";
let issues = get_issues(&client, owner, repo_name).expect("failed to get issues");
let issues_arr = issues
.as_array()
.expect("failed to cast issues to json array");
if issues_arr.len() > 0 {
let first_issue = &issues_arr[0];
let number_as_value = &first_issue["number"];
let number = number_as_value.as_u64().unwrap();
let reactions =
get_reactions(&client, owner, repo_name, number).expect("failed to get reactions");
println!(
"reactions:
{:?}",
reactions
);
} else {
println!("no issues!");
}
}
fn get_issues(client: &Github, owner: &str, repo_name: &str) -> Option<Value> {
let issues_endpoint = format!("repos/{}/{}/issues", owner, repo_name);
let response = client
.get()
.custom_endpoint(&issues_endpoint)
.execute::<Value>();
print_info_and_get_json(response)
}
fn get_reactions(
client: &Github,
owner: &str,
repo_name: &str,
issue_number: u64,
) -> Option<Value> {
let reactions_endpoint = format!(
"repos/{}/{}/issues/{}/reactions",
owner, repo_name, issue_number
);
println!("reactions endpoint: {:?}", &reactions_endpoint);
let reactions_response = client
.get()
.custom_endpoint(&reactions_endpoint)
.set_header(
ACCEPT,
HeaderValue::from_static("application/vnd.github.squirrel-girl-preview"),
)
.execute::<Value>();
print_info_and_get_json(reactions_response)
}
fn print_info_and_get_json(
response: Result<(HeaderMap, StatusCode, Option<Value>), github_rs::errors::Error>,
) -> Option<Value> {
match response {
Ok((headers, status, json)) => {
println!("{:#?}", headers);
println!("{}", status);
json
}
Err(e) => {
println!("{}", e);
None
}
}
}