use crate::error::Result;
use serde::Deserialize;
use std::collections::HashMap;
use std::path::PathBuf;
#[derive(Debug, Clone, Deserialize)]
pub struct Workflow {
pub steps: Vec<WorkflowStep>,
}
impl Workflow {
pub fn from_file(path: &PathBuf) -> Result<Self> {
let content = std::fs::read_to_string(path)?;
Ok(serde_json::from_str(&content)?)
}
}
#[derive(Debug, Clone, Deserialize)]
pub struct WorkflowStep {
pub id: String,
pub condition: Option<String>,
pub request: StepRequest,
}
#[derive(Debug, Clone, Deserialize)]
pub struct StepRequest {
#[serde(default = "default_method")]
pub method: String,
pub path: String,
#[serde(default)]
pub body: Option<serde_json::Value>,
#[serde(default)]
pub headers: Option<HashMap<String, String>>,
}
fn default_method() -> String {
"GET".to_string()
}