use crate::runtime::Runtime;
use crate::step::Step;
use crate::strategy::Strategy;
use crate::trigger::Trigger;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use ts_rs::TS;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
#[serde(rename_all = "lowercase")]
pub enum NodeType {
Automatic,
Manual,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
pub struct Node {
pub id: String,
pub name: String,
#[serde(default)]
#[ts(optional=nullable)]
pub description: Option<String>,
#[serde(default = "default_node_type")]
pub r#type: NodeType,
#[serde(default)]
#[ts(optional, as = "Option<Vec<String>>")]
pub depends_on: Vec<String>,
#[serde(default)]
#[ts(optional=nullable)]
pub trigger: Option<Trigger>,
#[serde(default)]
#[ts(optional=nullable)]
pub strategy: Option<Strategy>,
#[serde(default)]
#[ts(optional=nullable)]
pub runtime: Option<Runtime>,
pub steps: Vec<Step>,
#[serde(default)]
#[ts(optional, as = "Option<HashMap<String, String>>")]
pub env: HashMap<String, String>,
}
fn default_node_type() -> NodeType {
NodeType::Automatic
}