use akribes_types::event as core_event;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum TaskEndVariant {
Success,
Unable,
Failed,
#[serde(other)]
Unknown,
}
impl Default for TaskEndVariant {
fn default() -> Self {
TaskEndVariant::Success
}
}
impl From<core_event::TaskEndVariant> for TaskEndVariant {
fn from(v: core_event::TaskEndVariant) -> Self {
match v {
core_event::TaskEndVariant::Success => TaskEndVariant::Success,
core_event::TaskEndVariant::Unable => TaskEndVariant::Unable,
core_event::TaskEndVariant::Failed => TaskEndVariant::Failed,
core_event::TaskEndVariant::Unknown => TaskEndVariant::Unknown,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json::json;
#[test]
fn success_roundtrips_byte_identical() {
let wire = r#""success""#;
let parsed: TaskEndVariant = serde_json::from_str(wire).unwrap();
assert_eq!(parsed, TaskEndVariant::Success);
let reserialized = serde_json::to_string(&parsed).unwrap();
assert_eq!(reserialized, wire);
}
#[test]
fn unable_roundtrips_byte_identical() {
let wire = r#""unable""#;
let parsed: TaskEndVariant = serde_json::from_str(wire).unwrap();
assert_eq!(parsed, TaskEndVariant::Unable);
let reserialized = serde_json::to_string(&parsed).unwrap();
assert_eq!(reserialized, wire);
}
#[test]
fn unknown_discriminant_deserializes_to_unknown() {
let wire = json!("partial");
let parsed: TaskEndVariant = serde_json::from_value(wire).unwrap();
assert_eq!(parsed, TaskEndVariant::Unknown);
}
#[test]
fn default_is_success() {
assert_eq!(TaskEndVariant::default(), TaskEndVariant::Success);
}
#[test]
fn converts_from_core_success() {
let core = core_event::TaskEndVariant::Success;
let sdk: TaskEndVariant = core.into();
assert_eq!(sdk, TaskEndVariant::Success);
}
#[test]
fn converts_from_core_unable() {
let core = core_event::TaskEndVariant::Unable;
let sdk: TaskEndVariant = core.into();
assert_eq!(sdk, TaskEndVariant::Unable);
}
#[test]
fn converts_from_core_unknown() {
let core = core_event::TaskEndVariant::Unknown;
let sdk: TaskEndVariant = core.into();
assert_eq!(sdk, TaskEndVariant::Unknown);
}
#[test]
fn variants_are_exhaustive_known_set() {
for known in ["success", "unable"] {
let wire = json!(known);
let parsed: TaskEndVariant = serde_json::from_value(wire).unwrap();
assert_ne!(
parsed,
TaskEndVariant::Unknown,
"known tag {known} surfaced as Unknown"
);
}
}
}