@@ -416,6 +416,18 @@ pub enum ReportedContentClassifiers {
416416 Spam ,
417417}
418418
419+ #[ derive( Debug , serde:: Deserialize , serde:: Serialize , Eq , PartialEq ) ]
420+ pub enum LockReason {
421+ #[ serde( rename = "off-topic" ) ]
422+ OffTopic ,
423+ #[ serde( rename = "too heated" ) ]
424+ TooHeated ,
425+ #[ serde( rename = "resolved" ) ]
426+ Resolved ,
427+ #[ serde( rename = "spam" ) ]
428+ Spam ,
429+ }
430+
419431#[ derive( Debug , serde:: Deserialize , Eq , PartialEq ) ]
420432#[ serde( rename_all = "snake_case" ) ]
421433pub enum PullRequestReviewState {
@@ -855,6 +867,36 @@ impl Issue {
855867 Ok ( ( ) )
856868 }
857869
870+ /// Lock an issue with an optional reason.
871+ pub async fn lock (
872+ & self ,
873+ client : & GithubClient ,
874+ reason : Option < LockReason > ,
875+ ) -> anyhow:: Result < ( ) > {
876+ let lock_url = format ! (
877+ "{}/issues/{}/lock" ,
878+ self . repository( ) . url( client) ,
879+ self . number
880+ ) ;
881+ #[ derive( serde:: Serialize ) ]
882+ struct LockReasonIssue {
883+ lock_reason : LockReason ,
884+ }
885+ client
886+ . send_req ( {
887+ let req = client. put ( & lock_url) ;
888+
889+ if let Some ( lock_reason) = reason {
890+ req. json ( & LockReasonIssue { lock_reason } )
891+ } else {
892+ req
893+ }
894+ } )
895+ . await
896+ . context ( "failed to lock issue" ) ?;
897+ Ok ( ( ) )
898+ }
899+
858900 pub async fn close ( & self , client : & GithubClient ) -> anyhow:: Result < ( ) > {
859901 let edit_url = format ! ( "{}/issues/{}" , self . repository( ) . url( client) , self . number) ;
860902 #[ derive( serde:: Serialize ) ]
0 commit comments