#![doc = include_str!("../README.md")]
#![allow(clippy::module_name_repetitions)]
pub mod config;
pub use amqprs;
use amqprs::connection::OpenConnectionArguments;
use deadpool::managed;
pub use deadpool::managed::reexports::*;
use deadpool::managed::{RecycleError, RecycleResult};
pub use config::{Config, ConfigError};
deadpool::managed_reexports!(
"amqprs",
Manager,
managed::Object<Manager>,
amqprs::error::Error,
ConfigError
);
struct Placeholder;
impl std::fmt::Debug for Placeholder {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "..")
}
}
pub type Connection = Object;
pub struct Manager {
con_args: OpenConnectionArguments,
}
impl Manager {
#[must_use]
#[inline]
pub const fn new(con_args: OpenConnectionArguments) -> Self {
Self { con_args }
}
}
impl std::fmt::Debug for Manager {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Manager")
.field("con_args", &Placeholder)
.finish()
}
}
impl managed::Manager for Manager {
type Type = amqprs::connection::Connection;
type Error = amqprs::error::Error;
async fn create(&self) -> Result<Self::Type, Self::Error> {
Self::Type::open(&self.con_args).await
}
async fn recycle(&self, conn: &mut Self::Type, _: &Metrics) -> RecycleResult<Self::Error> {
if conn.is_open() {
Ok(())
} else {
Err(RecycleError::message("Connection closed."))
}
}
}