use std::sync::Arc;
use crate::prelude::{thirdparty::arrow_array::Array, *};
pub struct Output<T: ArrowMessage> {
pub raw: RawOutput,
_phantom: std::marker::PhantomData<T>,
}
impl<T: ArrowMessage> Output<T> {
pub fn new(tx: Vec<MessageSender>, clock: Arc<HLC>, source: NodeID, layout: OutputID) -> Self {
Self {
raw: RawOutput::new(tx, clock, source, layout),
_phantom: std::marker::PhantomData,
}
}
pub async fn send(&self, data: T) -> Result<()> {
self.raw
.send(
data.try_into_arrow()
.wrap_err(report_failed_conversion_to_arrow::<T>(
&self.raw.source,
&self.raw.layout,
))?
.into_data(),
)
.await
}
}