easy-rmq-rs 1.0.2

Easy-to-use RabbitMQ library for Rust
Documentation
pub mod error;
pub mod middleware;
pub mod pool;
pub mod publisher;
pub mod registry;
pub mod subscriber;
pub mod traits;
pub mod utils;
pub mod worker;

pub use error::{AmqpError, Result};
pub use middleware::{
    Middleware, get_execution_time_us, get_headers,
};
pub use pool::{ChannelPool, create_pool};
pub use publisher::Publisher;
pub use registry::SubscriberRegistry;
pub use subscriber::Subscriber;
pub use traits::AmqpPublisher;
pub use utils::{default_exchange_for_kind, generate_trace_id};
pub use worker::{
    BuiltWorker, Data, WorkerBuilder,
};

use std::sync::Arc;

pub struct AmqpClient {
    channel_pool: Arc<ChannelPool>,
}

impl AmqpClient {
    pub fn new(uri: String, connection_name: String, max_size: usize) -> Result<Self> {
        let pool = Arc::new(create_pool(uri, connection_name, max_size)?);
        let channel_pool = Arc::new(ChannelPool::new(pool));

        Ok(Self { channel_pool })
    }

    pub async fn get_channel(&self) -> Result<lapin::Channel> {
        self.channel_pool.get_channel().await
    }

    pub fn publisher(&self) -> Publisher {
        Publisher::new(self.channel_pool.clone())
    }

    pub fn channel_pool(&self) -> Arc<ChannelPool> {
        self.channel_pool.clone()
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_create_client() {
        let client = AmqpClient::new("amqp://guest:guest@localhost:5672".to_string(), "test-connection".to_string(), 10);
        assert!(client.is_ok());
    }
}