automatons_github/event/
mod.rs1use std::fmt::{Display, Formatter};
11
12use serde::{Deserialize, Serialize};
13
14pub use self::check_run::{CheckRunAction, CheckRunEvent};
15
16mod check_run;
17
18#[derive(Clone, Eq, PartialEq, Debug, Deserialize, Serialize)]
30#[serde(untagged)]
31pub enum GitHubEvent {
32 CheckRun(Box<CheckRunEvent>),
34
35 Unsupported,
37}
38
39impl Display for GitHubEvent {
40 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
41 let string_representation = match self {
42 GitHubEvent::CheckRun(event) => format!("check run {}", event.action()),
43 GitHubEvent::Unsupported => "unsupported".into(),
44 };
45
46 write!(f, "{}", string_representation)
47 }
48}
49
50impl Default for GitHubEvent {
51 fn default() -> Self {
52 GitHubEvent::Unsupported
53 }
54}
55
56#[cfg(test)]
57mod tests {
58 use super::GitHubEvent;
59
60 #[test]
61 fn trait_deserialize_check_run() {
62 let github_event: GitHubEvent = serde_json::from_str(include_str!(
63 "../../tests/fixtures/event/check_run.completed.json"
64 ))
65 .unwrap();
66
67 if let GitHubEvent::CheckRun(check_run_event) = github_event {
68 assert_eq!("Run tests", check_run_event.check_run().name().get());
69 } else {
70 panic!("expected a check run event");
71 }
72 }
73
74 #[test]
75 fn trait_send() {
76 fn assert_send<T: Send>() {}
77 assert_send::<GitHubEvent>();
78 }
79
80 #[test]
81 fn trait_sync() {
82 fn assert_sync<T: Sync>() {}
83 assert_sync::<GitHubEvent>();
84 }
85}