mae 0.3.14

Opinionated async Rust framework for building Mae-Technologies micro-services — app scaffolding, repo layer, middleware, and test utilities.
Documentation
use crate::app::build::{App, DeriveContext, Run};
use crate::app::configuration::get_configuration;
use crate::telemetry::{get_subscriber, init_subscriber};
use anyhow::Context;
use serde::Deserialize;

pub async fn run<
    Settings: for<'a> Deserialize<'a> + DeriveContext<Context> + Clone + Send,
    Context: Clone + Send + 'static,
    Application: App + Run + Send + 'static
>(
    service_name: &str,
    log_level: &str
) -> anyhow::Result<()> {
    let subscriber = get_subscriber(service_name.into(), log_level.into(), std::io::stdout);
    init_subscriber(subscriber).with_context(|| "failed to initialize subscriber")?;

    let config = get_configuration::<Settings>().with_context(|| "Failed to read config file")?;

    let _application =
        Application::build::<Settings, Context>(config.clone()).await?.run_until_stopped().await;

    Ok(())
}