use async_trait::async_trait;
use crate::transform::TransformRequest;
#[async_trait]
pub trait Emitter: Eq + Send + Sync
where
<Self as Emitter>::TransformRequest: TransformRequest, {
type TransformRequest;
type EmitterError;
type InitContext;
fn new(init_context: Self::InitContext) -> Result<Self, Self::EmitterError>
where
Self: Sized;
async fn update_init_context(
&mut self,
init_context: Self::InitContext,
) -> Result<(), Self::EmitterError>;
async fn emitter_loop(&mut self) -> Result<(), Self::EmitterError>;
async fn emit_transform_request(
&mut self,
request: Self::TransformRequest,
) -> Result<(), Self::EmitterError>;
}
pub(crate) enum EmissionHint {
Halt,
Resume,
}