use serde::Serialize;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum VerifyStatus {
Pending,
Passed,
Failed,
Skipped,
TimedOut,
InfrastructureFailure,
Unobserved,
}
impl VerifyStatus {
pub const ALL: [Self; 7] = [
Self::Pending,
Self::Passed,
Self::Failed,
Self::Skipped,
Self::TimedOut,
Self::InfrastructureFailure,
Self::Unobserved,
];
pub fn as_str(&self) -> &'static str {
match self {
Self::Pending => "pending",
Self::Passed => "passed",
Self::Failed => "failed",
Self::Skipped => "skipped",
Self::TimedOut => "timed_out",
Self::InfrastructureFailure => "infrastructure_failure",
Self::Unobserved => "unobserved",
}
}
pub fn parse_str(s: &str) -> Option<Self> {
match s {
"pending" => Some(Self::Pending),
"passed" => Some(Self::Passed),
"failed" => Some(Self::Failed),
"skipped" => Some(Self::Skipped),
"timed_out" => Some(Self::TimedOut),
"infrastructure_failure" => Some(Self::InfrastructureFailure),
"unobserved" => Some(Self::Unobserved),
_ => None,
}
}
pub fn was_attempted(self) -> bool {
matches!(
self,
Self::Passed | Self::Failed | Self::TimedOut | Self::InfrastructureFailure
)
}
}
#[cfg(test)]
mod tests {
use super::VerifyStatus;
#[test]
fn timed_out_round_trips() {
assert_eq!(VerifyStatus::TimedOut.as_str(), "timed_out");
assert_eq!(VerifyStatus::parse_str("timed_out"), Some(VerifyStatus::TimedOut));
}
#[test]
fn infrastructure_failure_round_trips() {
assert_eq!(
VerifyStatus::InfrastructureFailure.as_str(),
"infrastructure_failure"
);
assert_eq!(
VerifyStatus::parse_str("infrastructure_failure"),
Some(VerifyStatus::InfrastructureFailure)
);
}
#[test]
fn unobserved_round_trips() {
assert_eq!(VerifyStatus::Unobserved.as_str(), "unobserved");
assert_eq!(VerifyStatus::parse_str("unobserved"), Some(VerifyStatus::Unobserved));
}
#[test]
fn was_attempted_excludes_skipped_pending_and_unobserved() {
assert!(VerifyStatus::Passed.was_attempted());
assert!(VerifyStatus::Failed.was_attempted());
assert!(VerifyStatus::TimedOut.was_attempted());
assert!(VerifyStatus::InfrastructureFailure.was_attempted());
assert!(!VerifyStatus::Skipped.was_attempted());
assert!(!VerifyStatus::Pending.was_attempted());
assert!(!VerifyStatus::Unobserved.was_attempted());
}
}