Skip to content

Commit

Permalink
Add GitHub issue locking helper
Browse files Browse the repository at this point in the history
  • Loading branch information
Urgau committed Nov 18, 2024
1 parent 742b66b commit e4f1366
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions src/github.rs
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,18 @@ pub enum ReportedContentClassifiers {
Spam,
}

#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq)]
pub enum LockReason {
#[serde(rename = "off-topic")]
OffTopic,
#[serde(rename = "too heated")]
TooHeated,
#[serde(rename = "resolved")]
Resolved,
#[serde(rename = "spam")]
Spam,
}

#[derive(Debug, serde::Deserialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum PullRequestReviewState {
Expand Down Expand Up @@ -855,6 +867,36 @@ impl Issue {
Ok(())
}

/// Lock an issue with an optional reason.
pub async fn lock(
&self,
client: &GithubClient,
reason: Option<LockReason>,
) -> anyhow::Result<()> {
let lock_url = format!(
"{}/issues/{}/lock",
self.repository().url(client),
self.number
);
#[derive(serde::Serialize)]
struct LockReasonIssue {
lock_reason: LockReason,
}
client
.send_req({
let req = client.put(&lock_url);

if let Some(lock_reason) = reason {
req.json(&LockReasonIssue { lock_reason })
} else {
req
}
})
.await
.context("failed to lock issue")?;
Ok(())
}

pub async fn close(&self, client: &GithubClient) -> anyhow::Result<()> {
let edit_url = format!("{}/issues/{}", self.repository().url(client), self.number);
#[derive(serde::Serialize)]
Expand Down

0 comments on commit e4f1366

Please sign in to comment.