gitea_sdk/api/pulls/
create.rs1use 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 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}