@@ -443,6 +443,18 @@ pub enum ReportedContentClassifiers {
443
443
Spam ,
444
444
}
445
445
446
+ #[ derive( Debug , serde:: Deserialize , serde:: Serialize , Eq , PartialEq ) ]
447
+ pub enum LockReason {
448
+ #[ serde( rename = "off-topic" ) ]
449
+ OffTopic ,
450
+ #[ serde( rename = "too heated" ) ]
451
+ TooHeated ,
452
+ #[ serde( rename = "resolved" ) ]
453
+ Resolved ,
454
+ #[ serde( rename = "spam" ) ]
455
+ Spam ,
456
+ }
457
+
446
458
#[ derive( Debug , serde:: Deserialize , Eq , PartialEq ) ]
447
459
#[ serde( rename_all = "snake_case" ) ]
448
460
pub enum PullRequestReviewState {
@@ -882,6 +894,36 @@ impl Issue {
882
894
Ok ( ( ) )
883
895
}
884
896
897
+ /// Lock an issue with an optional reason.
898
+ pub async fn lock (
899
+ & self ,
900
+ client : & GithubClient ,
901
+ reason : Option < LockReason > ,
902
+ ) -> anyhow:: Result < ( ) > {
903
+ let lock_url = format ! (
904
+ "{}/issues/{}/lock" ,
905
+ self . repository( ) . url( client) ,
906
+ self . number
907
+ ) ;
908
+ #[ derive( serde:: Serialize ) ]
909
+ struct LockReasonIssue {
910
+ lock_reason : LockReason ,
911
+ }
912
+ client
913
+ . send_req ( {
914
+ let req = client. put ( & lock_url) ;
915
+
916
+ if let Some ( lock_reason) = reason {
917
+ req. json ( & LockReasonIssue { lock_reason } )
918
+ } else {
919
+ req
920
+ }
921
+ } )
922
+ . await
923
+ . context ( "failed to lock issue" ) ?;
924
+ Ok ( ( ) )
925
+ }
926
+
885
927
pub async fn close ( & self , client : & GithubClient ) -> anyhow:: Result < ( ) > {
886
928
let edit_url = format ! ( "{}/issues/{}" , self . repository( ) . url( client) , self . number) ;
887
929
#[ derive( serde:: Serialize ) ]
0 commit comments