use {
anyhow::*,
byo_graphql::*,
serde::Deserialize,
};
#[derive(Debug, Deserialize)]
pub struct Repository {
stargazers: Count,
}
pub fn get_repo_stars(owner: &str, name: &str) -> Result<usize> {
let mut graphql_client = GraphqlClient::new("https://api.github.com/graphql")?;
graphql_client.set_bearer_auth(std::env::var("GITHUB_API_TOKEN")?);
let query = format!(
r#"{{ repository(owner: "{}", name: "{}") {} }}"#,
owner,
name,
r#"{ stargazers { totalCount } }"#,
);
let repo: Repository = graphql_client.get_first_item(query)?;
Ok(repo.stargazers.into())
}
pub fn main() -> Result<()> {
let (owner, name) = ("Canop", "bacon");
println!(
"Repository {}/{} has {} stars",
owner, name,
get_repo_stars(owner, name)?
);
Ok(())
}