@@ -111,7 +111,7 @@ struct Reviewers {
111
111
}
112
112
113
113
/// Assignment data stored in the issue/PR body.
114
- #[ derive( Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
114
+ #[ derive( Debug , Clone , PartialEq , Default , serde:: Serialize , serde:: Deserialize ) ]
115
115
struct AssignData {
116
116
user : Option < String > ,
117
117
}
@@ -624,7 +624,10 @@ pub(super) async fn handle_command(
624
624
625
625
set_assignee ( ctx, issue, & ctx. github , & assignee) . await ?;
626
626
} else {
627
- let e = EditIssueBody :: new ( & issue, "ASSIGN" ) ;
627
+ let mut client = ctx. db . get ( ) . await ;
628
+ let mut e: EditIssueBody < ' _ , AssignData > =
629
+ EditIssueBody :: load ( & mut client, & issue, "ASSIGN" ) . await ?;
630
+ let d = e. data_mut ( ) ;
628
631
629
632
let to_assign = match cmd {
630
633
AssignCommand :: Claim => event. user ( ) . login . clone ( ) ,
@@ -635,14 +638,14 @@ pub(super) async fn handle_command(
635
638
username. clone ( )
636
639
}
637
640
AssignCommand :: ReleaseAssignment => {
638
- if let Some ( AssignData {
641
+ if let AssignData {
639
642
user : Some ( current) ,
640
- } ) = e . current_data ( )
643
+ } = d
641
644
{
642
- if current == event. user ( ) . login || is_team_member {
645
+ if * current == event. user ( ) . login || is_team_member {
643
646
issue. remove_assignees ( & ctx. github , Selection :: All ) . await ?;
644
- e . apply ( & ctx . github , String :: new ( ) , AssignData { user : None } )
645
- . await ?;
647
+ * d = AssignData { user : None } ;
648
+ e . apply ( & ctx . github , String :: new ( ) ) . await ?;
646
649
return Ok ( ( ) ) ;
647
650
} else {
648
651
bail ! ( "Cannot release another user's assignment" ) ;
@@ -653,8 +656,8 @@ pub(super) async fn handle_command(
653
656
issue
654
657
. remove_assignees ( & ctx. github , Selection :: One ( & current) )
655
658
. await ?;
656
- e . apply ( & ctx . github , String :: new ( ) , AssignData { user : None } )
657
- . await ?;
659
+ * d = AssignData { user : None } ;
660
+ e . apply ( & ctx . github , String :: new ( ) ) . await ?;
658
661
return Ok ( ( ) ) ;
659
662
} else {
660
663
bail ! ( "Cannot release unassigned issue" ) ;
@@ -672,14 +675,15 @@ pub(super) async fn handle_command(
672
675
) ;
673
676
return Ok ( ( ) ) ;
674
677
}
675
- let data = AssignData {
678
+ * d = AssignData {
676
679
user : Some ( to_assign. clone ( ) ) ,
677
680
} ;
678
681
679
- e. apply ( & ctx. github , String :: new ( ) , & data) . await ?;
680
-
681
682
match issue. set_assignee ( & ctx. github , & to_assign) . await {
682
- Ok ( ( ) ) => return Ok ( ( ) ) , // we are done
683
+ Ok ( ( ) ) => {
684
+ e. apply ( & ctx. github , String :: new ( ) ) . await ?;
685
+ return Ok ( ( ) ) ;
686
+ } // we are done
683
687
Err ( github:: AssignmentError :: InvalidAssignee ) => {
684
688
issue
685
689
. set_assignee ( & ctx. github , & ctx. username )
@@ -690,7 +694,7 @@ pub(super) async fn handle_command(
690
694
to_assign,
691
695
event. html_url( ) . unwrap( )
692
696
) ;
693
- e. apply ( & ctx. github , cmt_body, & data ) . await ?;
697
+ e. apply ( & ctx. github , cmt_body) . await ?;
694
698
}
695
699
Err ( e) => return Err ( e. into ( ) ) ,
696
700
}
0 commit comments