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