use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use ts_rs::TS;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
pub struct Step {
pub name: String,
#[serde(flatten)]
pub action: StepAction,
#[serde(default)]
#[ts(optional, as = "Option<HashMap<String, String>>")]
pub env: Option<HashMap<String, String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
#[serde(rename_all = "snake_case")]
pub enum StepAction {
#[serde(rename = "use")]
UseTemplate(TemplateUse),
#[serde(rename = "run")]
RunScript(String),
#[serde(rename = "ast-grep")]
AstGrep(UseAstGrep),
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
pub struct TemplateUse {
pub template: String,
#[serde(default)]
#[ts(optional, as = "Option<HashMap<String, String>>")]
pub inputs: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
#[serde(rename_all = "snake_case")]
pub struct UseAstGrep {
pub paths: Vec<String>,
pub query: UseAstGrepQuery,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
#[serde(rename_all = "snake_case")]
pub enum UseAstGrepQuery {
Inline(String),
File(String),
}