// Code generated by oagen. DO NOT EDIT.

#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::enums::*;
use serde::{Deserialize, Serialize};
/// Summary of the most recent block-test run.
/// The two harmonized axes — execution status and verdict outcome — are
/// exposed as separate fields. The runner only writes the summary on
/// terminal-state transitions, so in practice ``status`` is one of
/// ``completed | error | cancelled`` and ``outcome`` is populated when
/// ``status == "completed"``.
/// ``status`` is a flat enum — there's no per-state payload to carry on a
/// summary projection, so the API_DESIGN.md ``lifecycle`` vs ``status``
/// convention says use ``status`` here.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LatestBlockTestRunSummary {
    pub run_record_id: String,
    pub status: LatestBlockTestRunSummaryStatus,
    #[serde(skip_serializing_if = "Option::is_none", default)]
    pub outcome: Option<LatestBlockTestRunSummaryOutcome>,
    pub started_at: String,
    #[serde(skip_serializing_if = "Option::is_none", default)]
    pub completed_at: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none", default)]
    pub duration_ms: Option<i64>,
    /// Defaults to ``.
    #[serde(skip_serializing_if = "Option::is_none", default)]
    pub workflow_draft_fingerprint: Option<String>,
    /// Defaults to ``.
    #[serde(skip_serializing_if = "Option::is_none", default)]
    pub block_config_fingerprint: Option<String>,
    /// Defaults to `0`.
    #[serde(skip_serializing_if = "Option::is_none", default)]
    pub assertions_passed: Option<i64>,
    /// Defaults to `0`.
    #[serde(skip_serializing_if = "Option::is_none", default)]
    pub assertions_failed: Option<i64>,
    /// Defaults to `0`.
    #[serde(skip_serializing_if = "Option::is_none", default)]
    pub blocked_assertions: Option<i64>,
}
