Skip to main content

nestrs_outbox/
module.rs

1use crate::options::OutboxOptions;
2use crate::relay::OutboxRelay;
3use axum::Router;
4use nestrs_core::{DynamicModule, ProviderRegistry};
5use std::any::TypeId;
6use std::sync::Arc;
7
8pub struct OutboxModule;
9
10impl OutboxModule {
11    pub fn register(options: OutboxOptions) -> DynamicModule {
12        if !options.allow_in_memory {
13            // Production gate: Nest refuses in-memory without allowInMemoryStorage.
14            tracing::warn!("outbox: allow_in_memory=false; ensure a durable store is configured");
15        }
16        let mut registry = ProviderRegistry::new();
17        let relay = Arc::new(OutboxRelay::from_options(&options));
18        registry.register_use_value::<OutboxRelay>(relay);
19        registry.register_use_value::<OutboxOptions>(Arc::new(options));
20        DynamicModule::from_parts(
21            registry,
22            Router::new(),
23            vec![TypeId::of::<OutboxRelay>(), TypeId::of::<OutboxOptions>()],
24        )
25    }
26}