ruest-framework 0.1.0

RUEST (Rust + NestJS) — framework backend : DI, modules, HTTP Axum, JWT, validation
Documentation
use crate::di::Container;

use super::ModuleContext;

/// Registers providers into the DI container (generated by `#[service]` / `#[module]`).
pub type ProviderRegisterFn = fn(&Container);

/// Metadata describing a NestJS-style module.
#[derive(Default)]
pub struct ModuleMetadata {
    pub imports: Vec<Box<dyn Module>>,
    pub providers: Vec<ProviderRegisterFn>,
    pub exports: Vec<&'static str>,
}

/// Trait implemented by all application modules (manually or via `#[module]`).
pub trait Module: Send + Sync {
    fn metadata(&self) -> ModuleMetadata;

    fn configure(&self, ctx: &mut ModuleContext) -> Result<(), super::CoreError> {
        let meta = self.metadata();
        for import in &meta.imports {
            import.configure(ctx)?;
        }
        for register in meta.providers {
            register(&ctx.container);
        }
        Ok(())
    }
}

/// Marker : ce module expose `wire_routes` (généré par `#[module]`).
pub trait HttpModule: Module {}