Skip to main content

libverify_github/
pr_api.rs

1use anyhow::{Context, Result};
2
3use crate::client::GitHubClient;
4use crate::types::SearchPrItem;
5
6/// Search for merged PRs within a date range using GitHub Search API.
7pub fn search_merged_prs(
8    client: &GitHubClient,
9    owner: &str,
10    repo: &str,
11    since: &str,
12    until: &str,
13) -> Result<Vec<u32>> {
14    let path = format!(
15        "/search/issues?q=repo:{owner}/{repo}+is:pr+is:merged+merged:{since}..{until}&sort=created&per_page=100"
16    );
17    let items: Vec<SearchPrItem> = client
18        .paginate_search(&path)
19        .context("failed to search merged PRs by date")?;
20    Ok(items.into_iter().map(|item| item.number).collect())
21}
22
23/// Search for merged PRs within a PR number range using GitHub Search API.
24pub fn search_merged_prs_in_range(
25    client: &GitHubClient,
26    owner: &str,
27    repo: &str,
28    start: u32,
29    end: u32,
30) -> Result<Vec<u32>> {
31    let path = format!(
32        "/search/issues?q=repo:{owner}/{repo}+is:pr+is:merged+number:{start}..{end}&sort=created&per_page=100"
33    );
34    let items: Vec<SearchPrItem> = client
35        .paginate_search(&path)
36        .context("failed to search merged PRs by number range")?;
37    Ok(items.into_iter().map(|item| item.number).collect())
38}