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)]
16#[allow(dead_code)]
17pub struct PluginConfigSchema {
18 pub required_fields: Vec<String>,
20 pub optional_fields: HashMap<String, serde_json::Value>,
22}
23
24#[allow(dead_code)]
26#[async_trait]
27pub trait PluginStep: Send + Sync {
28 fn name(&self) -> &str;
30
31 async fn execute(
33 &self,
34 step_def: &StepDef,
35 config: &StepConfig,
36 context: &Context,
37 ) -> Result<StepOutput, StepError>;
38
39 fn validate(&self, config: &StepConfig) -> Result<(), StepError>;
41
42 fn config_schema(&self) -> PluginConfigSchema;
44}