use ::std::sync::Arc;
use ::async_nats::jetstream::{
consumer::pull::Config as PullConfig, stream::Config as StreamConfig,
};
#[derive(Debug, Clone)]
pub struct SubFetcherOpt {
pub(super) stream_cfg: StreamConfig,
pub(super) pull_cfg: PullConfig,
}
impl SubFetcherOpt {
pub fn new(name: Arc<str>) -> Self {
Self {
stream_cfg: StreamConfig {
name: name.clone().to_string(),
..Default::default()
},
pull_cfg: PullConfig {
name: Some(name.clone().to_string()),
..PullConfig::default()
},
}
}
pub fn name(mut self, name: impl Into<String>) -> Self {
self.stream_cfg.name = name.into();
self
}
pub fn subjects(mut self, subjects: Vec<impl Into<String>>) -> Self {
self.stream_cfg.subjects = subjects.into_iter().map(Into::into).collect();
self
}
pub fn durable_name(mut self, durable_name: impl Into<String>) -> Self {
self.pull_cfg.durable_name = Some(durable_name.into());
self
}
pub fn stream_config(mut self, stream_cfg: StreamConfig) -> Self {
self.stream_cfg = stream_cfg;
self
}
pub fn pull_config(mut self, pull_cfg: PullConfig) -> Self {
self.pull_cfg = pull_cfg;
self
}
}