use std::sync::Arc;
pub mod api;
pub mod auth;
pub mod config;
pub mod error;
pub mod logging;
pub mod mail;
pub mod policy;
pub mod rate_limit;
pub mod sanitize;
pub mod security;
pub mod smtp;
pub mod validation;
#[cfg(test)]
mod tests;
pub struct AppState {
pub config: Arc<config::AppConfig>,
pub smtp: smtp::SmtpTransport,
pub rate_limiter: Arc<rate_limit::RateLimiter>,
}
impl AppState {
pub fn new(config: config::AppConfig) -> Arc<Self> {
let smtp = smtp::build_transport(&config.smtp)
.expect("SMTP transport construction failed after config validation");
let rate_limiter = Arc::new(rate_limit::RateLimiter::new(&config.rate_limit));
Arc::new(Self {
config: Arc::new(config),
smtp,
rate_limiter,
})
}
}