use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use ts_rs::TS;
use crate::runtime::Runtime;
use crate::step::Step;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
pub struct TemplateInput {
pub name: String,
#[serde(default = "default_input_type")]
pub r#type: String,
#[serde(default)]
#[ts(optional, as = "Option<bool>")]
pub required: bool,
#[serde(default)]
pub description: Option<String>,
#[serde(default)]
pub default: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
pub struct TemplateOutput {
pub name: String,
pub value: String,
#[serde(default)]
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
pub struct Template {
pub id: String,
pub name: String,
#[serde(default)]
#[ts(optional=nullable)]
pub description: Option<String>,
#[serde(default)]
#[ts(optional=nullable)]
pub runtime: Option<Runtime>,
#[serde(default)]
pub inputs: Vec<TemplateInput>,
pub steps: Vec<Step>,
#[serde(default)]
#[ts(optional, as = "Option<Vec<TemplateOutput>>")]
pub outputs: Vec<TemplateOutput>,
#[serde(default)]
#[ts(as = "Option<HashMap<String, String>>", optional)]
pub env: HashMap<String, String>,
}
fn default_input_type() -> String {
"string".to_string()
}