shepherd-rs 0.2.0

Shepherd is a resilient, non-blocking orchestrator that persistently transforms and delivers data—built for remote, compute-heavy workloads.
Documentation
//! # Worker Manager Trait
//!
//! This trait defines the behavior of worker managers in the shepherd
//! framework.
//!
//! ## Overview
//! - **WorkerManager**: Manages worker instances and their interactions.
//! - **Error Handling**: Provides mechanisms for handling worker manager
//!   errors.
//!
//! ## Example
//! ```rust
//! struct MyWorkerManager;
//!
//! impl WorkerManager for MyWorkerManager {
//!     // Implementation details...
//! }
//! ```

use std::error::Error;
use std::sync::Arc;

use async_trait::async_trait;
use tokio::sync::Mutex;
use tokio::sync::mpsc::{Receiver, Sender};

use crate::config::Config;
use crate::transform::TransformAttempt;

#[async_trait]
pub trait WorkerManager: Send {
    type TransformAttempt: TransformAttempt;
    type WorkerManagerError: Error + Send;
    type Config: Config;

    async fn new(
        init_config: Arc<Mutex<Self::Config>>,
        recv_channel: Receiver<Self::TransformAttempt>,
        send_channel: Sender<WorkerManagerResult<Self::TransformAttempt>>,
    ) -> Result<Self, Self::WorkerManagerError>
    where
        Self: Sized;

    async fn wm_loop(&mut self) -> Result<(), Self::WorkerManagerError>;
}

#[derive(Debug, Clone)]
pub enum WorkerManagerResult<T: TransformAttempt> {
    Success(T::Identifier, T::ReturnPackage),
    Failure(T::Identifier, T::ReturnPackage),
}