use async_trait::async_trait; use crate::{ nodes::ApiClient, scenario::{DynError, StartNodeOptions, StartedNode}, }; /// Deployer-agnostic control surface for runtime node operations. #[async_trait] pub trait NodeControlHandle: Send + Sync { async fn restart_node(&self, _name: &str) -> Result<(), DynError> { Err("restart_node not supported by this deployer".into()) } async fn start_node(&self, _name: &str) -> Result { Err("start_node not supported by this deployer".into()) } async fn start_node_with( &self, _name: &str, _options: StartNodeOptions, ) -> Result { Err("start_node_with not supported by this deployer".into()) } async fn stop_node(&self, _name: &str) -> Result<(), DynError> { Err("stop_node not supported by this deployer".into()) } fn node_client(&self, _name: &str) -> Option { None } fn node_pid(&self, _name: &str) -> Option { None } }