gitea_sdk/api/issues/
edit.rs

1use 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    // TODO: Make this a DateTime<Utc>
36    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    /// Send the request to edit the issue.
57    pub async fn send(&self, client: &crate::Client) -> Result<Issue> {
58        // send the request
59        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}