use async_trait::async_trait;
use crate::envelope::{Envelope, EnvelopeRequest};
use crate::error::ClusterError;
use crate::message::ReplyReceiver;
use crate::types::RunnerAddress;
#[async_trait]
pub trait Runners: Send + Sync {
async fn ping(&self, address: &RunnerAddress) -> Result<(), ClusterError>;
async fn send(
&self,
address: &RunnerAddress,
envelope: EnvelopeRequest,
) -> Result<ReplyReceiver, ClusterError>;
async fn notify(&self, address: &RunnerAddress, envelope: Envelope)
-> Result<(), ClusterError>;
async fn on_runner_unavailable(&self, address: &RunnerAddress) -> Result<(), ClusterError>;
}