gitea_sdk/api/pulls/
list.rs

1use build_it::Builder;
2use serde::Serialize;
3
4use crate::{
5    error::Result,
6    model::{
7        issues::State,
8        pulls::{PullRequest, Sort},
9    },
10    Client,
11};
12
13#[derive(Debug, Clone, Serialize, Builder)]
14#[build_it(into)]
15pub struct ListPullRequestsBuilder {
16    #[skip]
17    #[serde(skip)]
18    owner: String,
19    #[skip]
20    #[serde(skip)]
21    repo: String,
22
23    state: Option<State>,
24    sort: Option<Sort>,
25    milestone: Option<i64>,
26    /// Label IDs
27    labels: Option<Vec<i64>>,
28    /// Page number of results to return (1-based)
29    page: Option<i64>,
30    /// Page size of results
31    limit: Option<i64>,
32}
33
34impl ListPullRequestsBuilder {
35    pub fn new(owner: impl ToString, repo: impl ToString) -> Self {
36        Self {
37            owner: owner.to_string(),
38            repo: repo.to_string(),
39            state: None,
40            sort: None,
41            milestone: None,
42            labels: None,
43            page: None,
44            limit: None,
45        }
46    }
47    /// Sends the request to list pull requests.
48    pub async fn send(&self, client: &Client) -> Result<Vec<PullRequest>> {
49        let owner = &self.owner;
50        let repo = &self.repo;
51        let req = client
52            .get(format!("/repos/{owner}/{repo}/pulls"))
53            .query(self)
54            .build()?;
55        let res = client.make_request(req).await?;
56        client.parse_response(res).await
57    }
58}