minion_engine/plugins/
mod.rs1pub mod loader;
2pub mod registry;
3
4use std::collections::HashMap;
5
6use async_trait::async_trait;
7
8use crate::config::StepConfig;
9use crate::engine::context::Context;
10use crate::error::StepError;
11use crate::steps::{StepOutput};
12use crate::workflow::schema::StepDef;
13
14#[derive(Debug, Clone, Default)]
16pub struct PluginConfigSchema {
17 pub required_fields: Vec<String>,
19 pub optional_fields: HashMap<String, serde_json::Value>,
21}
22
23#[async_trait]
25pub trait PluginStep: Send + Sync {
26 fn name(&self) -> &str;
28
29 async fn execute(
31 &self,
32 step_def: &StepDef,
33 config: &StepConfig,
34 context: &Context,
35 ) -> Result<StepOutput, StepError>;
36
37 fn validate(&self, config: &StepConfig) -> Result<(), StepError>;
39
40 fn config_schema(&self) -> PluginConfigSchema;
42}