@@ -416,6 +416,18 @@ pub enum ReportedContentClassifiers {
416
416
Spam ,
417
417
}
418
418
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
+
419
431
#[ derive( Debug , serde:: Deserialize , Eq , PartialEq ) ]
420
432
#[ serde( rename_all = "snake_case" ) ]
421
433
pub enum PullRequestReviewState {
@@ -855,6 +867,36 @@ impl Issue {
855
867
Ok ( ( ) )
856
868
}
857
869
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
+
858
900
pub async fn close ( & self , client : & GithubClient ) -> anyhow:: Result < ( ) > {
859
901
let edit_url = format ! ( "{}/issues/{}" , self . repository( ) . url( client) , self . number) ;
860
902
#[ derive( serde:: Serialize ) ]
0 commit comments