use super::{WaeResult, consumers::MessageConsumer, producers::MessageProducer, types::*};
#[async_trait::async_trait]
pub trait QueueManager: Send + Sync {
async fn declare_queue(&self, config: &QueueConfig) -> WaeResult<()>;
async fn delete_queue(&self, name: &str) -> WaeResult<()>;
async fn queue_exists(&self, name: &str) -> WaeResult<bool>;
async fn queue_message_count(&self, name: &str) -> WaeResult<u64>;
async fn purge_queue(&self, name: &str) -> WaeResult<u64>;
}
pub trait QueueService: Send + Sync {
async fn create_producer(&self, config: ProducerConfig) -> WaeResult<MessageProducer>;
async fn create_consumer(&self, config: ConsumerConfig) -> WaeResult<MessageConsumer>;
fn manager(&self) -> &dyn QueueManager;
async fn close(&self) -> WaeResult<()>;
}