Skip to main content

shepherd_rs/worker/
worker_manager.rs

1//! # Worker Manager Trait
2//!
3//! This trait defines the behavior of worker managers in the shepherd
4//! framework.
5//!
6//! ## Overview
7//! - **WorkerManager**: Manages worker instances and their interactions.
8//! - **Error Handling**: Provides mechanisms for handling worker manager
9//!   errors.
10//!
11//! ## Example
12//! ```rust
13//! struct MyWorkerManager;
14//!
15//! impl WorkerManager for MyWorkerManager {
16//!     // Implementation details...
17//! }
18//! ```
19
20use 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}