use crate::prelude::IggyClient;
use async_dropper::AsyncDrop;
use async_trait::async_trait;
use iggy_common::{
ConsumerGroup, ConsumerGroupDetails, Identifier, IggyError, locking::IggyRwLockFn,
};
use iggy_common::{ConsumerGroupClient, UserClient};
#[async_trait]
impl ConsumerGroupClient for IggyClient {
async fn get_consumer_group(
&self,
stream_id: &Identifier,
topic_id: &Identifier,
group_id: &Identifier,
) -> Result<Option<ConsumerGroupDetails>, IggyError> {
self.client
.read()
.await
.get_consumer_group(stream_id, topic_id, group_id)
.await
}
async fn get_consumer_groups(
&self,
stream_id: &Identifier,
topic_id: &Identifier,
) -> Result<Vec<ConsumerGroup>, IggyError> {
self.client
.read()
.await
.get_consumer_groups(stream_id, topic_id)
.await
}
async fn create_consumer_group(
&self,
stream_id: &Identifier,
topic_id: &Identifier,
name: &str,
) -> Result<ConsumerGroupDetails, IggyError> {
self.client
.read()
.await
.create_consumer_group(stream_id, topic_id, name)
.await
}
async fn delete_consumer_group(
&self,
stream_id: &Identifier,
topic_id: &Identifier,
group_id: &Identifier,
) -> Result<(), IggyError> {
self.client
.read()
.await
.delete_consumer_group(stream_id, topic_id, group_id)
.await
}
async fn join_consumer_group(
&self,
stream_id: &Identifier,
topic_id: &Identifier,
group_id: &Identifier,
) -> Result<(), IggyError> {
self.client
.read()
.await
.join_consumer_group(stream_id, topic_id, group_id)
.await
}
async fn leave_consumer_group(
&self,
stream_id: &Identifier,
topic_id: &Identifier,
group_id: &Identifier,
) -> Result<(), IggyError> {
self.client
.read()
.await
.leave_consumer_group(stream_id, topic_id, group_id)
.await
}
}
#[async_trait]
impl AsyncDrop for IggyClient {
async fn async_drop(&mut self) {
let _ = self.client.read().await.logout_user().await;
}
}