use std::marker::PhantomData;
use crate::dataflow::{Data, Message};
mod extract_stream;
mod ingest_stream;
mod loop_stream;
mod read_stream;
mod write_stream;
pub mod errors;
use errors::SendError;
pub use extract_stream::ExtractStream;
pub use ingest_stream::IngestStream;
#[doc(hidden)]
pub use loop_stream::LoopStream;
pub use read_stream::ReadStream;
pub use write_stream::WriteStream;
use super::graph::default_graph;
pub type StreamId = crate::Uuid;
pub trait WriteStreamT<D: Data> {
fn send(&mut self, msg: Message<D>) -> Result<(), SendError>;
}
pub trait Stream<D: Data> {
fn name(&self) -> String {
default_graph::get_stream_name(&self.id())
}
fn set_name(&mut self, name: &str) {
default_graph::set_stream_name(&self.id(), name);
}
fn id(&self) -> StreamId;
}
#[derive(Clone)]
pub struct OperatorStream<D: Data> {
id: StreamId,
phantom: PhantomData<D>,
}
#[allow(dead_code)]
impl<D: Data> OperatorStream<D> {
pub(crate) fn new() -> Self {
let id = StreamId::new_deterministic();
Self {
id,
phantom: PhantomData,
}
}
}
impl<D: Data> Stream<D> for OperatorStream<D> {
fn id(&self) -> StreamId {
self.id
}
}