pub mod loader;
pub mod registry;
use std::collections::HashMap;
use async_trait::async_trait;
use crate::config::StepConfig;
use crate::engine::context::Context;
use crate::error::StepError;
use crate::steps::{StepOutput};
use crate::workflow::schema::StepDef;
#[derive(Debug, Clone, Default)]
#[allow(dead_code)]
pub struct PluginConfigSchema {
pub required_fields: Vec<String>,
pub optional_fields: HashMap<String, serde_json::Value>,
}
#[allow(dead_code)]
#[async_trait]
pub trait PluginStep: Send + Sync {
fn name(&self) -> &str;
async fn execute(
&self,
step_def: &StepDef,
config: &StepConfig,
context: &Context,
) -> Result<StepOutput, StepError>;
fn validate(&self, config: &StepConfig) -> Result<(), StepError>;
fn config_schema(&self) -> PluginConfigSchema;
}