gitea_sdk/api/issues/
edit.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 EditIssueBuilder {
9 #[skip]
10 #[serde(skip)]
11 pub owner: String,
12 #[skip]
13 #[serde(skip)]
14 pub repo: String,
15 #[skip]
16 #[serde(skip)]
17 pub issue_number: i64,
18
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub assignees: Option<Vec<String>>,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub body: Option<String>,
23 #[serde(skip_serializing_if = "Option::is_none")]
24 pub due_date: Option<String>,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub milestone: Option<i64>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 #[build_it(rename = "refs")]
29 pub r#ref: Option<String>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub title: Option<String>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub unset_due_date: Option<bool>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub updated_at: Option<String>,
37}
38
39impl EditIssueBuilder {
40 pub fn new(owner: impl ToString, repo: impl ToString, issue_number: i64) -> Self {
41 Self {
42 owner: owner.to_string(),
43 repo: repo.to_string(),
44 issue_number,
45 assignees: None,
46 body: None,
47 due_date: None,
48 milestone: None,
49 r#ref: None,
50 title: None,
51 unset_due_date: None,
52 updated_at: None,
53 }
54 }
55
56 pub async fn send(&self, client: &crate::Client) -> Result<Issue> {
58 let owner = &self.owner;
60 let repo = &self.repo;
61 let index = &self.issue_number;
62 let req = client
63 .patch(format!("repos/{owner}/{repo}/issues/{index}"))
64 .json(self)
65 .build()?;
66 let res = client.make_request(req).await?;
67 client.parse_response(res).await
68 }
69}