use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
use super::Strategy;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct Handler {
pub name: String,
pub event_type: String,
pub condition: Option<String>,
pub action: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct Step {
pub name: String,
pub r#type: String, pub condition: Option<String>,
pub params: HashMap<String, String>,
#[serde(default)]
pub spec: Value,
pub strategy: Option<Strategy>,
pub aggregation: Vec<Aggregation>,
pub iterate: Option<String>,
pub iterate_as: Option<String>,
pub steps: Option<Vec<Step>>, pub next: Vec<String>,
pub on_failure: Option<Box<Step>>,
pub retry: Option<RetryPolicy>,
pub timeout: Option<String>,
pub allow_failure: Option<bool>,
pub start_marker: Option<String>,
pub end_marker: Option<String>,
pub outputs: Vec<OutputExtraction>,
#[serde(default)]
pub reports: Vec<TestReport>,
#[serde(default)]
pub artifacts: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct TestReport {
pub name: String,
pub path: String,
pub format: String, }
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct Aggregation {
pub name: String,
pub description: Option<String>,
pub value: String, }
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct OutputExtraction {
pub name: String,
pub source: String,
pub marker: Option<String>,
pub format: Option<String>,
pub regex: Option<String>,
pub group: Option<u32>,
pub sensitive: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct RetryPolicy {
pub count: u32,
pub backoff: String,
pub max_delay: Option<String>,
}