martianbook 0.1.0

Transform ordinary Rust codebases into explainable execution artifacts.
Documentation
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>,
}