use nest_rs_config::ConfigModule;
use nest_rs_core::{ContainerBuilder, DynamicModule};
use crate::QueueConnection;
use crate::config::QueueConfig;
pub struct QueueModule;
impl QueueModule {
pub fn for_root(config: impl Into<Option<QueueConfig>>) -> QueueSetup {
QueueSetup {
pinned: config.into(),
}
}
}
pub struct QueueSetup {
pinned: Option<QueueConfig>,
}
impl DynamicModule for QueueSetup {
fn collect(&self, builder: ContainerBuilder) -> ContainerBuilder {
let builder = ConfigModule::provide_feature(self.pinned.clone(), builder);
builder.provide_factory::<QueueConnection, _, _>(|container| async move {
let config = container
.get::<QueueConfig>()
.expect("QueueConfig is resolved by ConfigModule::provide_feature");
Ok(QueueConnection::connect(&config.url).await?)
})
}
}