use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct Outcome {
pub conclusion: Conclusion,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub failure: Option<FailureDetail>,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Conclusion {
#[default]
Success,
Failure,
Cancelled,
Skipped,
TimedOut,
InfraError,
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct FailureDetail {
pub class: FailureClass,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub subclass: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub failing_step: Option<String>,
pub excerpt: String,
pub excerpt_encoding: String,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum FailureClass {
#[default]
Build,
Test,
Lint,
Bench,
Infra,
Timeout,
MergeConflict,
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct Execution {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pick_id: Option<String>,
pub attempt: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub runner: Option<String>,
pub started_at: String,
pub finished_at: String,
pub duration_ms: u64,
pub ran_suites: Vec<String>,
pub skipped_suites: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub runner_pool: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub trust_tier: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub isolation_tier: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub materialization_proof: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub secret_grants: Vec<String>,
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct LogRef {
pub manifest_digest: String,
pub size_bytes: u64,
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct Repro {
pub command: Vec<String>,
pub env: BTreeMap<String, String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub image: Option<String>,
pub services: Vec<String>,
}