use std::fmt::{Display, Formatter};
use serde::{Deserialize, Serialize};
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum CheckRunConclusion {
Success,
Failure,
Neutral,
Skipped,
Cancelled,
TimedOut,
ActionRequired,
Stale,
}
impl Display for CheckRunConclusion {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
let string_representation = match self {
CheckRunConclusion::Success => "success",
CheckRunConclusion::Failure => "failure",
CheckRunConclusion::Neutral => "neutral",
CheckRunConclusion::Skipped => "skipped",
CheckRunConclusion::Cancelled => "cancelled",
CheckRunConclusion::TimedOut => "timed out",
CheckRunConclusion::ActionRequired => "action required",
CheckRunConclusion::Stale => "stale",
};
write!(f, "{}", string_representation)
}
}
#[cfg(test)]
mod tests {
use super::CheckRunConclusion;
#[test]
fn trait_deserialize() {
let conclusion: CheckRunConclusion = serde_json::from_str(r#""action_required""#).unwrap();
assert!(matches!(conclusion, CheckRunConclusion::ActionRequired));
}
#[test]
fn trait_display() {
let conclusion = CheckRunConclusion::ActionRequired;
assert_eq!("action required", conclusion.to_string());
}
#[test]
fn trait_send() {
fn assert_send<T: Send>() {}
assert_send::<CheckRunConclusion>();
}
#[test]
fn trait_sync() {
fn assert_sync<T: Sync>() {}
assert_sync::<CheckRunConclusion>();
}
}