use {
anyhow::*,
byo_graphql::*,
serde::Deserialize,
};
#[derive(Debug, Deserialize)]
pub struct Repository {
stargazers: Count,
}
pub async 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).await?;
Ok(repo.stargazers.into())
}
#[tokio::main]
async fn main() -> Result<()> {
let (owner, name) = ("Canop", "bacon");
println!(
"Repository {}/{} has {} stars",
owner,
name,
get_repo_stars(owner, name).await?
);
Ok(())
}