use std::collections::HashMap;
use myko_macros::myko_item;
use serde::{Deserialize, Serialize};
use ts_rs::TS;
use crate::PlaybookId;
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, TS)]
#[serde(rename_all = "camelCase")]
pub enum RunStatus {
Queued,
#[default]
Running,
Completed,
Failed,
Cancelled,
}
myko::register_ts_export!(RunStatus);
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, TS)]
#[serde(rename_all = "camelCase")]
pub struct HostStats {
pub ok: u32,
pub changed: u32,
pub failed: u32,
pub skipped: u32,
pub unreachable: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub last_failure: Option<HostFailure>,
}
myko::register_ts_export!(HostStats);
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, TS)]
#[serde(rename_all = "camelCase")]
pub struct HostFailure {
pub task: String,
pub message: String,
pub seq: u64,
}
myko::register_ts_export!(HostFailure);
#[myko_item]
pub struct Run {
pub playbook_id: PlaybookId,
pub status: RunStatus,
pub started_at: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub finished_at: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub exit_code: Option<i32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extra_vars: Option<serde_json::Value>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub limit: Option<String>,
#[serde(default)]
pub resources: Vec<String>,
#[serde(default)]
pub host_stats: HashMap<String, HostStats>,
#[myko_client_id]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub client_id: Option<String>,
}