sinan 0.1.0

A Boilerplate for Rapid Axum Web Service Deployment.
Documentation
use eyre::OptionExt;

use crate::contracts::{Application, Facade, Service};
use crate::error::Error;
use crate::facades::{Config, container, Container};
use crate::services::{service, ServiceProvider};

pub fn run<A: Application>() {
    let mut container = Container::new();

    A::with_facades(&mut container);

    container.into_static();

    let mut service_provider = ServiceProvider::new();

    A::register(&mut service_provider);

    service_provider.into_static();

    if let Some(err) = A::boot(service()).err() {
        tracing::error!("boot error: {err}");
    }
}

// copy
pub fn app<T: Facade>() -> Option<T> {
    container().get::<T>().cloned()
}

pub fn config() -> eyre::Result<Config> {
    app::<Config>().ok_or_eyre(Error::Message("Config not registered".to_owned()))
}