use serde::{Deserialize, Serialize};
#[derive(
Serialize,
Deserialize,
Clone
)]
#[serde(rename_all="lowercase")]
pub enum Status{
Success,
Failed,
Skipped,
Running
}
#[derive(
Serialize,
Deserialize,
Clone
)]
pub struct Environment{
pub language:String,
pub language_version:String,
pub platform:String,
#[serde(skip_serializing_if="Option::is_none")]
pub runtime:Option<String>,
}
#[derive(
Serialize,
Deserialize,
Clone
)]
pub struct Mission{
pub id:String,
pub entry_point:String,
pub adapter:String,
pub adapter_version:String,
pub status:Status,
pub started_at:String,
pub duration_ms:f64,
pub environment:Environment
}
#[derive(
Serialize,
Deserialize,
Clone
)]
pub struct ExecutionNode{
pub id:String,
pub name:String,
pub module:String,
pub file:String,
pub line_start:u32,
pub call_order:u32,
pub depth:u32,
pub duration_ms:f64,
pub status:Status,
#[serde(skip_serializing_if="Option::is_none")]
pub text:Option<String>,
#[serde(skip_serializing_if="Option::is_none")]
pub source_code:Option<String>,
#[serde(skip_serializing_if="Vec::is_empty")]
pub stdout:Vec<String>,
#[serde(skip_serializing_if="Vec::is_empty")]
pub stderr:Vec<String>,
#[serde(skip_serializing_if="Option::is_none")]
pub parent:Option<String>,
#[serde(skip_serializing_if="Vec::is_empty")]
pub children:Vec<String>,
}
#[derive(
Serialize,
Deserialize,
Clone
)]
pub struct MartianReport{
pub martian_version:String,
pub mission:Mission,
#[serde(skip_serializing_if="Vec::is_empty")]
pub execution:Vec<ExecutionNode>,
}