#github #api #typed #consumer #limit

githubapi

Easy to use, strongly typed GitHub API consumer

1 unstable release

0.1.0 Aug 6, 2019

#47 in #consumer

MIT license

21KB
479 lines

This is a work in progress!

Please don't put it into production yet.

What's there?

Not a whole lot, yet. The list of examples is pretty exhaustive.

Envelope

Result type

Every endpoint returns Result<GitHubApiResult<T>, GitHubApiError>.

GitHubApiResult

pub struct GitHubApiResult<T> {
    pub result: T,
    pub raw_result: String,
    pub limits: Option<LimitRemainingReset>,
    pub owner: Option<String>,
    pub repository: Option<String>,
    pub next_page: Option<u64>,
}

GitHubApiError

pub enum GitHubApiError {
    NotImplemented,
    JsonError((JsonError, String)),
    GitHubError((String, String)),
    ReqwestError(ReqwestError),
}

Examples

Get rate limit

let gh = GitHubApi::new(&username, &password);
let result = gh.get_rate_limit();
println!("{:#?}", result);

Get license

let gh = GitHubApi::new(&username, &password);
let license = gh.get_license("segfaultsourcery", "githubapi");
println!("{:#?}", license);

Get releases

let gh = GitHubApi::new(&username, &password);
for page in gh.get_releases("segfaultsourcery", "githubapi") {
    println!("{:#?}", page);
}

Get tags

let gh = GitHubApi::new(&username, &password);
for page in gh.get_tags("segfaultsourcery", "githubapi") {
    println!("{:#?}", page);
}

Dependencies

~25MB
~508K SLoC