use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
use super::{Input, StorageMount};
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct CommonContainerSpec {
pub image: String,
pub command: Option<Vec<String>>,
pub args: Option<Vec<String>>,
pub env: Option<Vec<EnvVar>>,
pub cpu: Option<String>,
pub memory: Option<String>,
pub privileged: Option<bool>,
pub storage_mounts: Option<Vec<StorageMount>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct K8sJobSpec {
pub image: String,
pub command: Option<Vec<String>>,
pub args: Option<Vec<String>>,
pub env: Option<Vec<EnvVar>>,
pub resources: Option<Resources>,
pub secret_mounts: Option<Vec<SecretMount>>,
pub config_map_mounts: Option<Vec<ConfigMapMount>>,
pub storage_mounts: Option<Vec<StorageMount>>,
pub active_deadline_seconds: Option<i64>,
pub backoff_limit: Option<i32>,
pub completions: Option<i32>,
pub parallelism: Option<i32>,
pub ttl_seconds_after_finished: Option<i32>,
pub privileged: Option<bool>,
pub minimum_version: Option<String>,
pub node_selector: Option<HashMap<String, String>>,
pub service_account_name: Option<String>,
pub restart_policy: Option<String>, pub labels: Option<HashMap<String, String>>,
pub annotations: Option<HashMap<String, String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct EnvVar {
pub name: String,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct Resources {
pub requests: Option<ResourceRequirements>,
pub limits: Option<ResourceRequirements>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ResourceRequirements {
pub cpu: Option<String>,
pub memory: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct SecretMount {
pub name: String,
pub mount_path: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ConfigMapMount {
pub name: String,
pub mount_path: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ApprovalSpec {
pub approvers: Option<Vec<String>>,
pub inputs: Option<Vec<Input>>,
pub notify: Option<EmailSpec>,
pub timeout: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct WaitEventSpec {
pub correlation_key: String,
pub correlation_value: String,
pub timeout: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct LambdaInvokeSpec {
pub function_name: String,
pub payload: Option<Value>,
pub invocation_type: Option<String>, pub qualifier: Option<String>, pub region: Option<String>,
pub assume_role_arn: Option<String>, pub role_session_name: Option<String>, }
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct GitCheckoutSpec {
pub repo: String,
pub r#ref: Option<String>,
pub depth: Option<u32>,
pub sparse_checkout: Option<Vec<String>>,
pub destination: Option<String>,
pub storage_mounts: Option<Vec<StorageMount>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct WasmStepSpec {
pub module: String, pub function: String,
pub args: Option<Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct WebhookInvokeSpec {
pub url: String,
pub method: Option<String>, pub headers: Option<HashMap<String, String>>,
pub body: Option<String>, pub timeout: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum EmailBackend {
Smtp,
Ses,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct EmailSpec {
pub from: String,
pub to: Vec<String>,
pub cc: Option<Vec<String>>,
pub bcc: Option<Vec<String>>,
pub subject: String,
pub body: String, pub html: Option<bool>,
pub backend: Option<EmailBackend>, pub smtp_server: Option<String>,
pub smtp_port: Option<u16>,
pub smtp_username: Option<String>,
pub smtp_password: Option<String>,
pub smtp_use_tls: Option<bool>,
pub smtp_use_mtls: Option<bool>,
pub ses_region: Option<String>,
pub ses_role_arn: Option<String>,
pub ses_configuration_set_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct JinjaRenderSpec {
pub template: String,
pub context: Option<Value>,
pub output_key: Option<String>, }
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct TestReportEmailSpec {
pub from: String,
pub to: Vec<String>,
pub subject: String,
pub template: Option<String>, pub report_name: Option<String>, pub backend: Option<EmailBackend>, pub smtp_server: Option<String>,
pub smtp_port: Option<u16>,
pub smtp_username: Option<String>,
pub smtp_password: Option<String>,
pub smtp_use_tls: Option<bool>,
pub smtp_use_mtls: Option<bool>,
pub ses_region: Option<String>,
pub ses_role_arn: Option<String>,
pub ses_configuration_set_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct JqSpec {
pub program: String,
pub input: Option<Value>,
pub input_file: Option<String>,
pub output_file: Option<String>,
pub storage_mounts: Option<Vec<StorageMount>>,
}