Skip to content

Commit 559e1d3

Browse files
committed
Make IssuesAction into a dataful enum, to remove unwraps
1 parent 2ab128e commit 559e1d3

File tree

4 files changed

+31
-32
lines changed

4 files changed

+31
-32
lines changed

src/github.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -911,7 +911,7 @@ pub struct IssueCommentEvent {
911911
}
912912

913913
#[derive(PartialEq, Eq, Debug, serde::Deserialize)]
914-
#[serde(rename_all = "snake_case")]
914+
#[serde(rename_all = "snake_case", tag = "action")]
915915
pub enum IssuesAction {
916916
Opened,
917917
Edited,
@@ -923,13 +923,22 @@ pub enum IssuesAction {
923923
Reopened,
924924
Assigned,
925925
Unassigned,
926-
Labeled,
927-
Unlabeled,
926+
Labeled {
927+
/// The label added from the issue
928+
label: Label,
929+
},
930+
Unlabeled {
931+
/// The label removed from the issue
932+
label: Label,
933+
},
928934
Locked,
929935
Unlocked,
930936
Milestoned,
931937
Demilestoned,
932-
ReviewRequested,
938+
ReviewRequested {
939+
/// The person requested to review the pull request
940+
requested_reviewer: User,
941+
},
933942
ReviewRequestRemoved,
934943
ReadyForReview,
935944
Synchronize,
@@ -940,13 +949,14 @@ pub enum IssuesAction {
940949

941950
#[derive(Debug, serde::Deserialize)]
942951
pub struct IssuesEvent {
952+
#[serde(flatten)]
943953
pub action: IssuesAction,
944954
#[serde(alias = "pull_request")]
945955
pub issue: Issue,
946956
pub changes: Option<Changes>,
947957
pub repository: Repository,
948-
/// Some if action is IssuesAction::Labeled, for example
949-
pub label: Option<Label>,
958+
/// The GitHub user that triggered the event.
959+
pub sender: User,
950960
}
951961

952962
#[derive(Debug, serde::Deserialize)]

src/handlers/autolabel.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ pub(super) async fn parse_input(
9595
}
9696
}
9797

98-
if event.action == IssuesAction::Labeled {
98+
if let IssuesAction::Labeled { label } = &event.action {
9999
let mut autolabels = Vec::new();
100-
let applied_label = &event.label.as_ref().expect("label").name;
100+
let applied_label = &label.name;
101101

102102
'outer: for (label, config) in config.get_by_trigger(applied_label) {
103103
let exclude_patterns: Vec<glob::Pattern> = config

src/handlers/major_change.rs

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,7 @@ pub(super) async fn parse_input(
5555
}
5656

5757
// If we were labeled with accepted, then issue that event
58-
if event.action == IssuesAction::Labeled
59-
&& event
60-
.label
61-
.as_ref()
62-
.map_or(false, |l| l.name == config.accept_label)
58+
if matches!(&event.action, IssuesAction::Labeled { label } if label.name == config.accept_label)
6359
{
6460
return Ok(Some(Invocation::AcceptedProposal));
6561
}
@@ -70,17 +66,8 @@ pub(super) async fn parse_input(
7066
// We want to treat reopened issues as new proposals but if the
7167
// issue is freshly opened, we only want to trigger once;
7268
// currently we do so on the label event.
73-
if (event.action == IssuesAction::Reopened
74-
&& event
75-
.issue
76-
.labels()
77-
.iter()
78-
.any(|l| l.name == enabling_label))
79-
|| (event.action == IssuesAction::Labeled
80-
&& event
81-
.label
82-
.as_ref()
83-
.map_or(false, |l| l.name == enabling_label))
69+
if matches!(event.action, IssuesAction::Reopened if event.issue.labels().iter().any(|l| l.name == enabling_label))
70+
|| matches!(&event.action, IssuesAction::Labeled { label } if label.name == enabling_label)
8471
{
8572
return Ok(Some(Invocation::NewProposal));
8673
}

src/handlers/notify_zulip.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ pub(super) async fn parse_input(
3131
None => return Ok(None),
3232
};
3333

34-
match event.action {
35-
IssuesAction::Labeled | IssuesAction::Unlabeled => {
36-
let applied_label = event.label.as_ref().expect("label").clone();
34+
match &event.action {
35+
IssuesAction::Labeled { label } | IssuesAction::Unlabeled { label } => {
36+
let applied_label = label.clone();
3737
Ok(config
3838
.labels
3939
.get(&applied_label.name)
@@ -60,14 +60,16 @@ fn parse_label_change_input(
6060
}
6161

6262
match event.action {
63-
IssuesAction::Labeled if config.message_on_add.is_some() => Some(NotifyZulipInput {
63+
IssuesAction::Labeled { .. } if config.message_on_add.is_some() => Some(NotifyZulipInput {
6464
notification_type: NotificationType::Labeled,
6565
label,
6666
}),
67-
IssuesAction::Unlabeled if config.message_on_remove.is_some() => Some(NotifyZulipInput {
68-
notification_type: NotificationType::Unlabeled,
69-
label,
70-
}),
67+
IssuesAction::Unlabeled { .. } if config.message_on_remove.is_some() => {
68+
Some(NotifyZulipInput {
69+
notification_type: NotificationType::Unlabeled,
70+
label,
71+
})
72+
}
7173
_ => None,
7274
}
7375
}

0 commit comments

Comments
 (0)