use std::cell::RefCell;
use std::marker::PhantomData;
use std::rc::Rc;
use crate::dsl::builder::InternalStreamsBuilder;
use crate::dsl::graph::NodeId;
use crate::processor::serde::DefaultSerde;
pub struct GlobalKTable<K, V, KS = <K as DefaultSerde>::Serde, VS = <V as DefaultSerde>::Serde> {
#[allow(dead_code)]
pub(crate) builder: Rc<RefCell<InternalStreamsBuilder>>,
#[allow(dead_code)]
pub(crate) node: NodeId,
pub(crate) store_name: String,
#[allow(dead_code)]
pub(crate) source_topic: String,
pub(crate) key_serde: KS,
pub(crate) value_serde: VS,
_pd: PhantomData<fn() -> (K, V)>,
}
impl<K, V, KS, VS> GlobalKTable<K, V, KS, VS> {
pub(crate) fn new(
builder: Rc<RefCell<InternalStreamsBuilder>>,
node: NodeId,
store_name: String,
source_topic: String,
key_serde: KS,
value_serde: VS,
) -> Self {
Self {
builder,
node,
store_name,
source_topic,
key_serde,
value_serde,
_pd: PhantomData,
}
}
pub(crate) fn store_name(&self) -> &str {
&self.store_name
}
pub fn with_key_serde<NewKS>(self, serde: NewKS) -> GlobalKTable<K, V, NewKS, VS> {
GlobalKTable {
builder: self.builder,
node: self.node,
store_name: self.store_name,
source_topic: self.source_topic,
key_serde: serde,
value_serde: self.value_serde,
_pd: PhantomData,
}
}
pub fn with_value_serde<NewVS>(self, serde: NewVS) -> GlobalKTable<K, V, KS, NewVS> {
GlobalKTable {
builder: self.builder,
node: self.node,
store_name: self.store_name,
source_topic: self.source_topic,
key_serde: self.key_serde,
value_serde: serde,
_pd: PhantomData,
}
}
}