1pub mod error;
2pub mod middleware;
3pub mod pool;
4pub mod publisher;
5pub mod registry;
6pub mod subscriber;
7pub mod traits;
8pub mod utils;
9pub mod worker;
10
11pub use error::{AmqpError, Result};
12pub use middleware::{
13 Middleware, get_execution_time_us, get_headers,
14};
15pub use pool::{ChannelPool, create_pool};
16pub use publisher::Publisher;
17pub use registry::SubscriberRegistry;
18pub use subscriber::Subscriber;
19pub use traits::AmqpPublisher;
20pub use utils::{default_exchange_for_kind, generate_trace_id};
21pub use worker::{
22 BuiltWorker, Data, WorkerBuilder,
23};
24
25use std::sync::Arc;
26
27pub struct AmqpClient {
28 channel_pool: Arc<ChannelPool>,
29}
30
31impl AmqpClient {
32 pub fn new(uri: String, connection_name: String, max_size: usize) -> Result<Self> {
33 let pool = Arc::new(create_pool(uri, connection_name, max_size)?);
34 let channel_pool = Arc::new(ChannelPool::new(pool));
35
36 Ok(Self { channel_pool })
37 }
38
39 pub async fn get_channel(&self) -> Result<lapin::Channel> {
40 self.channel_pool.get_channel().await
41 }
42
43 pub fn publisher(&self) -> Publisher {
44 Publisher::new(self.channel_pool.clone())
45 }
46
47 pub fn channel_pool(&self) -> Arc<ChannelPool> {
48 self.channel_pool.clone()
49 }
50}
51
52#[cfg(test)]
53mod tests {
54 use super::*;
55
56 #[test]
57 fn test_create_client() {
58 let client = AmqpClient::new("amqp://guest:guest@localhost:5672".to_string(), "test-connection".to_string(), 10);
59 assert!(client.is_ok());
60 }
61}