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::TransformRequest;
#[async_trait]
pub trait Emitter: Send + Sync {
type TransformRequest: TransformRequest;
type Error: Error + Send;
type Config: Config;
async fn new(
init_config: Arc<Mutex<Self::Config>>,
send_channel: Sender<Self::TransformRequest>,
recv_channel: Receiver<EmissionState>,
) -> Result<Self, Self::Error>
where
Self: Sized;
async fn emitter_loop(&mut self) -> Result<(), Self::Error>;
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EmissionState {
Halt,
Operational,
}