use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)]
pub enum BuildStatusState {
#[default]
#[serde(rename = "UNKNOWN")]
Unknown,
#[serde(rename = "SUCCESSFUL")]
Successful,
#[serde(rename = "FAILED")]
Failed,
#[serde(rename = "INPROGRESS")]
InProgress,
#[serde(rename = "CANCELLED")]
Cancelled,
}
impl From<String> for BuildStatusState {
fn from(value: String) -> Self {
match value.as_str() {
"UNKNOWN" => BuildStatusState::Unknown,
"SUCCESSFUL" => BuildStatusState::Successful,
"FAILED" => BuildStatusState::Failed,
"INPROGRESS" => BuildStatusState::InProgress,
"CANCELLED" => BuildStatusState::Cancelled,
_ => BuildStatusState::Unknown,
}
}
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct TestResults {
pub failed: u32,
pub successful: u32,
pub skipped: u32,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_can_convert_string_to_state() {
let state = BuildStatusState::from("SUCCESSFUL".to_string());
assert_eq!(state, BuildStatusState::Successful);
let state = BuildStatusState::from("FAILED".to_string());
assert_eq!(state, BuildStatusState::Failed);
let state = BuildStatusState::from("INPROGRESS".to_string());
assert_eq!(state, BuildStatusState::InProgress);
let state = BuildStatusState::from("CANCELLED".to_string());
assert_eq!(state, BuildStatusState::Cancelled);
let state = BuildStatusState::from("UNKNOWN".to_string());
assert_eq!(state, BuildStatusState::Unknown);
let state = BuildStatusState::from("InVaLiD".to_string());
assert_eq!(state, BuildStatusState::Unknown);
}
}