github-fetch 0.1.0

A comprehensive GitHub API client for fetching issues, PRs, reviews, discussions, and diffs with filtering support
Documentation
use github_fetch::{GitHubFetcher, Repository};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    env_logger::init();

    let fetcher = GitHubFetcher::new(None)?;

    let repo = Repository::new("tokio-rs", "axum");
    let pr_number = 2865;

    println!("Fetching Axum PR #{}...", pr_number);

    let pr = fetcher.fetch_pr(&repo, pr_number).await?;

    println!("\n=== Pull Request Information ===");
    println!("Number: #{}", pr.number);
    println!("Title: {}", pr.title);
    println!("State: {}", pr.state);
    println!("Author: {}", pr.user.login);
    println!("Created: {}", pr.created_at);
    println!("Updated: {}", pr.updated_at);
    if let Some(closed_at) = pr.closed_at {
        println!("Closed: {}", closed_at);
    }
    if let Some(merged_at) = pr.merged_at {
        println!("Merged: {}", merged_at);
    }
    println!("Comments: {}", pr.comments);
    println!(
        "Labels: {:?}",
        pr.labels.iter().map(|l| &l.name).collect::<Vec<_>>()
    );
    println!("URL: {}", pr.html_url);

    if let Some(body) = &pr.body {
        println!("\n=== Description ===");
        println!("{}", body);
    }

    println!("\n=== Fetching PR Files ===");
    let files = fetcher.fetch_pr_files(&repo, pr_number).await?;
    println!("Found {} files changed", files.len());

    for file in files.iter().take(5) {
        println!("\n{}", file.filename);
        println!("  Status: {}", file.status);
        println!(
            "  Changes: +{} -{} ({})",
            file.additions, file.deletions, file.changes
        );

        if let Some(patch) = &file.patch {
            let lines: Vec<&str> = patch.lines().take(10).collect();
            println!("  Patch (first 10 lines):");
            for line in lines {
                println!("    {}", line);
            }
            if patch.lines().count() > 10 {
                println!("    ...(truncated)");
            }
        }
    }

    if files.len() > 5 {
        println!("\n... and {} more files", files.len() - 5);
    }

    Ok(())
}