use crate::error::PluginError;
use crate::task::TaskState;
use async_trait::async_trait;
#[derive(Debug, Clone)]
pub struct PluginContext {
pub runtime_name: String,
pub task_name: Option<String>,
pub task_state: Option<TaskState>,
}
impl PluginContext {
pub fn new(runtime_name: impl Into<String>) -> Self {
Self {
runtime_name: runtime_name.into(),
task_name: None,
task_state: None,
}
}
pub fn with_task(mut self, name: impl Into<String>, state: TaskState) -> Self {
self.task_name = Some(name.into());
self.task_state = Some(state);
self
}
}
#[async_trait]
pub trait Plugin: Send + Sync {
fn name(&self) -> &str;
async fn on_startup(&self, ctx: &PluginContext) -> Result<(), PluginError> {
let _ = ctx;
Ok(())
}
async fn on_task_start(&self, ctx: &PluginContext) -> Result<(), PluginError> {
let _ = ctx;
Ok(())
}
async fn on_task_stop(&self, ctx: &PluginContext) -> Result<(), PluginError> {
let _ = ctx;
Ok(())
}
async fn on_shutdown(&self, ctx: &PluginContext) -> Result<(), PluginError> {
let _ = ctx;
Ok(())
}
async fn on_error(&self, ctx: &PluginContext, error: &str) -> Result<(), PluginError> {
let _ = (ctx, error);
Ok(())
}
}