use crate::core::errors::EngineError;
use async_trait::async_trait;
pub use crate::store::output::{ContentRef, OutputEvent};
#[async_trait]
pub trait OutputSink: Send + Sync {
async fn emit(&self, event: OutputEvent) -> Result<(), EngineError>;
}
#[derive(Clone)]
pub struct EngineSink {
engine: crate::core::engine::Engine,
token: crate::types::CapToken,
task_id: crate::types::TaskId,
attempt: u32,
}
impl EngineSink {
pub fn new(
engine: crate::core::engine::Engine,
token: crate::types::CapToken,
task_id: crate::types::TaskId,
attempt: u32,
) -> Self {
Self {
engine,
token,
task_id,
attempt,
}
}
}
#[async_trait]
impl OutputSink for EngineSink {
async fn emit(&self, event: OutputEvent) -> Result<(), EngineError> {
self.engine
.submit_output(&self.token, &self.task_id, self.attempt, event)
.await
}
}