use arrow_data::ArrayData;
use tokio::sync::mpsc::{Receiver, Sender};
use uuid::Uuid;
use crate::prelude::*;
use uhlc::Timestamp;
#[derive(Debug, PartialEq, Clone)]
pub struct Header {
pub timestamp: Timestamp,
pub source: (Uuid, Uuid),
}
#[derive(Debug, PartialEq, Clone)]
pub struct DataflowMessage {
pub header: Header,
pub data: ArrayData,
}
pub type MessageSender = Sender<DataflowMessage>;
pub type MessageReceiver = Receiver<DataflowMessage>;
#[derive(Debug, PartialEq, Clone)]
pub struct TypedDataflowMessage<T: ArrowMessage> {
pub header: Header,
pub data: T,
}
impl<T> TryFrom<DataflowMessage> for TypedDataflowMessage<T>
where
T: ArrowMessage,
{
type Error = eyre::Report;
fn try_from(value: DataflowMessage) -> Result<Self> {
let data = T::try_from_arrow(value.data)?;
Ok(Self {
header: value.header,
data,
})
}
}