use crate::node::Node;
use crate::utils::env::EnvVar;
use crate::utils::output::Output;
use async_trait::async_trait;
use std::sync::Arc;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RetryDecision {
Retry,
Fail,
}
#[async_trait]
pub trait ExecutionHook: Send + Sync {
async fn before_node_run(&self, node: &dyn Node, env: &Arc<EnvVar>);
async fn after_node_run(&self, node: &dyn Node, output: &Output, env: &Arc<EnvVar>);
async fn on_error(&self, error: &(dyn std::error::Error + Send + Sync), env: &Arc<EnvVar>);
async fn on_retry(
&self,
_node: &dyn Node,
_error: &(dyn std::error::Error + Send + Sync),
_attempt: u32,
_max_retries: u32,
_env: &Arc<EnvVar>,
) -> RetryDecision {
RetryDecision::Retry
}
async fn on_skip(&self, _node: &dyn Node, _env: &Arc<EnvVar>) {}
}