use std::fmt::{Display, Formatter};
use serde::{Deserialize, Serialize};
pub use self::check_run::{CheckRunAction, CheckRunEvent};
mod check_run;
#[derive(Clone, Eq, PartialEq, Debug, Deserialize, Serialize)]
#[serde(untagged)]
pub enum GitHubEvent {
CheckRun(Box<CheckRunEvent>),
Unsupported,
}
impl Display for GitHubEvent {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
let string_representation = match self {
GitHubEvent::CheckRun(event) => format!("check run {}", event.action()),
GitHubEvent::Unsupported => "unsupported".into(),
};
write!(f, "{}", string_representation)
}
}
impl Default for GitHubEvent {
fn default() -> Self {
GitHubEvent::Unsupported
}
}
#[cfg(test)]
mod tests {
use super::GitHubEvent;
#[test]
fn trait_deserialize_check_run() {
let github_event: GitHubEvent = serde_json::from_str(include_str!(
"../../tests/fixtures/event/check_run.completed.json"
))
.unwrap();
if let GitHubEvent::CheckRun(check_run_event) = github_event {
assert_eq!("Run tests", check_run_event.check_run().name().get());
} else {
panic!("expected a check run event");
}
}
#[test]
fn trait_send() {
fn assert_send<T: Send>() {}
assert_send::<GitHubEvent>();
}
#[test]
fn trait_sync() {
fn assert_sync<T: Sync>() {}
assert_sync::<GitHubEvent>();
}
}