use super::SubscriptionMode;
#[derive(Debug, Clone)]
pub struct GroupOpts {
pub group_id: String,
pub shard_count: Option<u32>,
pub instance_id: Option<String>,
}
impl GroupOpts {
pub fn new(group_id: impl Into<String>) -> Self {
Self {
group_id: group_id.into(),
shard_count: None,
instance_id: None,
}
}
#[must_use]
pub const fn shards(mut self, count: u32) -> Self {
self.shard_count = Some(count);
self
}
#[must_use]
pub fn instance_id(mut self, id: impl Into<String>) -> Self {
self.instance_id = Some(id.into());
self
}
}
#[derive(Debug, Clone, Default)]
pub struct SubscribeOpts {
pub subscription_name: Option<String>,
pub topic_key_filter: Option<String>,
pub mode: SubscriptionMode,
pub consumer_group: Option<GroupOpts>,
}
impl SubscribeOpts {
#[must_use]
pub const fn default_ephemeral() -> Self {
Self {
subscription_name: None,
topic_key_filter: None,
mode: SubscriptionMode::Ephemeral,
consumer_group: None,
}
}
#[must_use]
pub fn broadcast() -> Self {
Self {
mode: SubscriptionMode::Durable,
..Self::default_ephemeral()
}
}
#[must_use]
pub fn consumer_group(mut self, opts: GroupOpts) -> Self {
self.subscription_name = None;
self.topic_key_filter = None;
self.mode = SubscriptionMode::Durable;
self.consumer_group = Some(opts);
self
}
#[must_use]
pub fn subscription_name(mut self, name: impl Into<String>) -> Self {
self.subscription_name = Some(name.into());
self
}
#[must_use]
pub fn topic_key_filter(mut self, key: impl Into<String>) -> Self {
self.topic_key_filter = Some(key.into());
self
}
#[must_use]
pub const fn mode(mut self, mode: SubscriptionMode) -> Self {
self.mode = mode;
self
}
}
#[derive(Debug, Default)]
pub struct SubscriptionHandle {
_private: (),
}
impl SubscriptionHandle {
#[must_use]
pub const fn new() -> Self {
Self { _private: () }
}
}