use crate::{McReceiver, MpSender, Run};
use async_trait::async_trait;
#[async_trait]
pub trait Processor<J, JId>
where
J: Run,
JId: Clone + Eq,
{
type RequestSender: MpSender<Message = (JId, J::Request)>;
type RequestReceiver: McReceiver<Message = (JId, J::Request)>;
type ResponseSender: MpSender<Message = (JId, Result<J::Response, J::Error>)>;
type ResponseReceiver: McReceiver<Message = (JId, Result<J::Response, J::Error>)>;
type Error;
fn request_sender(&self) -> Self::RequestSender;
fn response_receiver(&self) -> Self::ResponseReceiver;
async fn run(&self, rsrcs: &mut J::Resources) -> Result<(), Self::Error>;
}