use super::stream_message::StreamMessage;
use crate::actors::actor_ref::ActorRef;
pub trait Materializer {
fn materialize(&self);
fn shutdown(&self);
}
pub struct StreamMaterializer {
source_ref: Option<ActorRef<StreamMessage, StreamMessage>>,
flow_refs: Vec<ActorRef<StreamMessage, StreamMessage>>,
sink_ref: Option<ActorRef<StreamMessage, StreamMessage>>,
}
impl StreamMaterializer {
pub fn new() -> Self {
StreamMaterializer {
source_ref: None,
flow_refs: Vec::new(),
sink_ref: None,
}
}
pub fn set_source(&mut self, source: ActorRef<StreamMessage, StreamMessage>) {
self.source_ref = Some(source);
}
pub fn add_flow(&mut self, flow: ActorRef<StreamMessage, StreamMessage>) {
self.flow_refs.push(flow);
}
pub fn set_sink(&mut self, sink: ActorRef<StreamMessage, StreamMessage>) {
self.sink_ref = Some(sink);
}
#[allow(clippy::type_complexity)]
pub fn get_refs(
&self,
) -> (
Option<&ActorRef<StreamMessage, StreamMessage>>,
&[ActorRef<StreamMessage, StreamMessage>],
Option<&ActorRef<StreamMessage, StreamMessage>>,
) {
(
self.source_ref.as_ref(),
&self.flow_refs,
self.sink_ref.as_ref(),
)
}
}
impl Default for StreamMaterializer {
fn default() -> Self {
Self::new()
}
}
impl Materializer for StreamMaterializer {
fn materialize(&self) {
}
fn shutdown(&self) {
}
}