shepherd_rs/worker/
worker_manager.rs1use std::error::Error;
21use std::sync::Arc;
22
23use async_trait::async_trait;
24use tokio::sync::Mutex;
25use tokio::sync::mpsc::{Receiver, Sender};
26
27use crate::config::Config;
28use crate::transform::TransformAttempt;
29
30#[async_trait]
31pub trait WorkerManager: Send {
32 type TransformAttempt: TransformAttempt;
33 type WorkerManagerError: Error + Send;
34 type Config: Config;
35
36 async fn new(
37 init_config: Arc<Mutex<Self::Config>>,
38 recv_channel: Receiver<Self::TransformAttempt>,
39 send_channel: Sender<WorkerManagerResult<Self::TransformAttempt>>,
40 ) -> Result<Self, Self::WorkerManagerError>
41 where
42 Self: Sized;
43
44 async fn wm_loop(&mut self) -> Result<(), Self::WorkerManagerError>;
45}
46
47#[derive(Debug, Clone)]
48pub enum WorkerManagerResult<T: TransformAttempt> {
49 Success(T::Identifier, T::ReturnPackage),
50 Failure(T::Identifier, T::ReturnPackage),
51}