gitea_sdk/api/pulls/
create.rs

1use build_it::Builder;
2use serde::Serialize;
3
4use crate::{error::Result, model::pulls::PullRequest, Client};
5
6#[derive(Debug, Clone, Serialize, Builder)]
7#[build_it(into)]
8pub struct CreatePullRequestBuilder {
9    #[serde(skip)]
10    #[skip]
11    owner: String,
12    #[serde(skip)]
13    #[skip]
14    repo: String,
15
16    #[skip]
17    base: String,
18    #[skip]
19    head: String,
20    #[skip]
21    title: String,
22
23    assignees: Option<Vec<String>>,
24    body: Option<String>,
25    due_date: Option<String>,
26    labels: Option<Vec<i64>>,
27    milestone: Option<i64>,
28}
29
30impl CreatePullRequestBuilder {
31    pub fn new(
32        owner: impl ToString,
33        repo: impl ToString,
34        head: impl ToString,
35        base: impl ToString,
36        title: impl ToString,
37    ) -> Self {
38        Self {
39            owner: owner.to_string(),
40            repo: repo.to_string(),
41            base: base.to_string(),
42            head: head.to_string(),
43            title: title.to_string(),
44            assignees: None,
45            body: None,
46            due_date: None,
47            labels: None,
48            milestone: None,
49        }
50    }
51
52    /// Sends the request to create a pull request
53    pub async fn send(&self, client: &Client) -> Result<PullRequest> {
54        let owner = &self.owner;
55        let repo = &self.repo;
56        let req = client
57            .post(format!("repos/{owner}/{repo}/pulls",))
58            .json(self)
59            .build()?;
60        let res = client.make_request(req).await?;
61        client.parse_response(res).await
62    }
63}