use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::ontology::Residue;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum FireStatus {
Claimed,
Running,
Succeeded,
Failed,
Timeout,
Unknown,
}
impl FireStatus {
pub fn hermes_word(self) -> &'static str {
match self {
Self::Claimed => "claimed",
Self::Running => "running",
Self::Succeeded => "completed",
Self::Failed | Self::Timeout => "failed",
Self::Unknown => "unknown",
}
}
pub fn from_hermes_word(word: &str) -> Option<Self> {
Some(match word {
"claimed" => Self::Claimed,
"running" => Self::Running,
"completed" => Self::Succeeded,
"failed" => Self::Failed,
"unknown" => Self::Unknown,
_ => return None,
})
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct Fire {
pub id: String,
pub job_id: String,
#[serde(default)]
pub session_id: Option<String>,
pub status: FireStatus,
pub claimed_at: String,
#[serde(default)]
pub started_at: Option<String>,
#[serde(default)]
pub finished_at: Option<String>,
#[serde(default)]
pub error: Option<String>,
#[serde(default)]
pub obligation_id: Option<String>,
#[serde(default)]
pub residue: Residue,
}