giraffate/ghrs

何番煎じかわからないが ghrs という GitHub Client を Rust で書いた。最初は会社の評価資料を書くために GitHub API から Event を取得する CLI を書いていたのだがちょうどいい GitHub Client がなかったのでそこから自分で書いた。

README に書いてある通り、 Octocrab のインターフェースをかなり参考にしている。ただ、 ちょっとした CLI を書くのに async 使うのはやりすぎと思っていたので、 Octocrab に似たようなインターフェースで blocking I/O でよいのでシンプルに書ける GitHub Client を探していたが見つからなかったので ghrs を書いた。

Usage

pull request の一覧を取得する場合は以下のように書ける。レスポンスの Link ヘッダーを見て次ページも取得できる。ただし、まだ issue, pull request, event の取得しか対応していない。

fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
    let client = Client::new();
    let mut current_page = client
        .pulls("owner", "repo")
        .list()
        .per_page(100)
        .page(1)
        .send()?;

    // You get pull requests.
    let mut pull_requests = current_page.take_items();

    // If you want to get next pages, see here.
    while let Some(next_page) = current_page.get_next_page() {
        current_page = next_page;
        pull_requests.extend(current_page.take_items());
    }

    Ok(())
}

Summary

機能は全然足りていないが、ちょうどいい具合に使いやすいものを書けたし会社の評価資料は書き始められたので、一旦満足してライブラリとしてまとめた。 crates.io にも上げておいた。