use std::convert::Infallible;
use amqprs::connection::OpenConnectionArguments;
use deadpool::Runtime;
use crate::{Manager, Pool, PoolBuilder, PoolConfig};
#[derive(Clone, Default)]
pub struct Config {
pub con_args: OpenConnectionArguments,
pub pool_config: Option<PoolConfig>,
}
impl Config {
#[must_use]
pub const fn new(con_args: OpenConnectionArguments, pool_config: Option<PoolConfig>) -> Self {
Self {
con_args,
pool_config,
}
}
#[must_use]
pub const fn new_with_con_args(con_args: OpenConnectionArguments) -> Self {
Self {
con_args,
pool_config: None,
}
}
#[must_use]
pub fn create_pool(&self) -> Pool {
self.builder()
.build()
.expect("`PoolBuilder::build` errored when it shouldn't")
}
pub fn builder(&self) -> PoolBuilder {
Pool::builder(Manager::new(self.con_args.clone()))
.config(self.pool_config.unwrap_or_default())
.runtime(Runtime::Tokio1)
}
}
impl std::fmt::Debug for Config {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Config")
.field("pool_config", &self.pool_config)
.finish_non_exhaustive()
}
}
pub type ConfigError = Infallible;