1use serde::{Deserialize, Serialize};
7use std::fmt;
8
9use crate::client::{Issue, PullRequest, Repository};
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct PullRequestEvent {
18 pub action: PullRequestAction,
20
21 pub number: u32,
23
24 pub pull_request: PullRequest,
26
27 pub repository: Repository,
29
30 pub sender: EventUser,
32}
33
34#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
36#[serde(rename_all = "snake_case")]
37pub enum PullRequestAction {
38 Opened,
39 Closed,
40 Reopened,
41 Synchronize,
42 Edited,
43 Assigned,
44 Unassigned,
45 ReviewRequested,
46 ReviewRequestRemoved,
47 Labeled,
48 Unlabeled,
49 ReadyForReview,
50 ConvertedToDraft,
51}
52
53impl fmt::Display for PullRequestAction {
54 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
55 let s = match self {
56 Self::Opened => "opened",
57 Self::Closed => "closed",
58 Self::Reopened => "reopened",
59 Self::Synchronize => "synchronize",
60 Self::Edited => "edited",
61 Self::Assigned => "assigned",
62 Self::Unassigned => "unassigned",
63 Self::ReviewRequested => "review_requested",
64 Self::ReviewRequestRemoved => "review_request_removed",
65 Self::Labeled => "labeled",
66 Self::Unlabeled => "unlabeled",
67 Self::ReadyForReview => "ready_for_review",
68 Self::ConvertedToDraft => "converted_to_draft",
69 };
70 write!(f, "{}", s)
71 }
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct IssueEvent {
81 pub action: IssueAction,
83
84 pub issue: Issue,
86
87 pub repository: Repository,
89
90 pub sender: EventUser,
92}
93
94#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
96#[serde(rename_all = "snake_case")]
97pub enum IssueAction {
98 Opened,
99 Closed,
100 Reopened,
101 Edited,
102 Assigned,
103 Unassigned,
104 Labeled,
105 Unlabeled,
106 Transferred,
107 Pinned,
108 Unpinned,
109}
110
111impl fmt::Display for IssueAction {
112 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
113 let s = match self {
114 Self::Opened => "opened",
115 Self::Closed => "closed",
116 Self::Reopened => "reopened",
117 Self::Edited => "edited",
118 Self::Assigned => "assigned",
119 Self::Unassigned => "unassigned",
120 Self::Labeled => "labeled",
121 Self::Unlabeled => "unlabeled",
122 Self::Transferred => "transferred",
123 Self::Pinned => "pinned",
124 Self::Unpinned => "unpinned",
125 };
126 write!(f, "{}", s)
127 }
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize)]
136pub struct PushEvent {
137 #[serde(rename = "ref")]
139 pub ref_name: String,
140
141 pub before: String,
143
144 pub after: String,
146
147 pub created: bool,
149
150 pub deleted: bool,
152
153 pub forced: bool,
155
156 pub commits: Vec<Commit>,
158
159 pub head_commit: Option<Commit>,
161
162 pub repository: Repository,
164
165 pub sender: EventUser,
167}
168
169#[derive(Debug, Clone, Serialize, Deserialize)]
171pub struct Commit {
172 pub id: String,
174
175 pub message: String,
177
178 pub timestamp: String,
180
181 pub author: CommitAuthor,
183
184 pub committer: CommitAuthor,
186}
187
188#[derive(Debug, Clone, Serialize, Deserialize)]
190pub struct CommitAuthor {
191 pub name: String,
193
194 pub email: String,
196
197 pub username: Option<String>,
199}
200
201#[derive(Debug, Clone, Serialize, Deserialize)]
207pub struct CheckRunEvent {
208 pub action: CheckRunAction,
210
211 pub check_run: CheckRun,
213
214 pub repository: Repository,
216
217 pub sender: EventUser,
219}
220
221#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
223#[serde(rename_all = "snake_case")]
224pub enum CheckRunAction {
225 Created,
226 Completed,
227 Rerequested,
228 RequestedAction,
229}
230
231#[derive(Debug, Clone, Serialize, Deserialize)]
233pub struct CheckRun {
234 pub id: u64,
236
237 pub name: String,
239
240 pub status: String,
242
243 pub conclusion: Option<String>,
245}
246
247#[derive(Debug, Clone, Serialize, Deserialize)]
253pub struct CheckSuiteEvent {
254 pub action: CheckSuiteAction,
256
257 pub check_suite: CheckSuite,
259
260 pub repository: Repository,
262
263 pub sender: EventUser,
265}
266
267#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
269#[serde(rename_all = "snake_case")]
270pub enum CheckSuiteAction {
271 Completed,
272 Requested,
273 Rerequested,
274}
275
276#[derive(Debug, Clone, Serialize, Deserialize)]
278pub struct CheckSuite {
279 pub id: u64,
281
282 pub status: String,
284
285 pub conclusion: Option<String>,
287}
288
289#[derive(Debug, Clone, Serialize, Deserialize)]
295pub struct EventUser {
296 pub id: u64,
298
299 pub login: String,
301
302 #[serde(rename = "type")]
304 pub user_type: String,
305}
306
307#[cfg(test)]
308#[path = "github_events_tests.rs"]
309mod tests;