slave 0.13.1

CLI for slave, a Laravel-inspired Rust framework for MCP-first apps: scaffold an MCP backend with auth, roles, teams and SurrealDB migrations, add server-rendered web apps, and route them by domain or path
use std::process::ExitCode;

use ::{{ crate_name }}::app;
use ::{{ crate_name }}::base::config::Config;
use ::{{ crate_name }}::base::state::AppState;

#[tokio::main]
async fn main() -> ExitCode {
    match run().await {
        Ok(()) => ExitCode::SUCCESS,
        Err(err) => {
            eprintln!("error: {err}");
            ExitCode::FAILURE
        }
    }
}

async fn run() -> slave_framework::Result<()> {
    slave_framework::env::load_dotenv()?;
    slave_framework::logging::init()?;

    let config = Config::from_env()?;
    let db = ::{{ crate_name }}::database(&config.database).await?;
    tracing::info!("Database: {}", config.database.describe());
    let (host, port) = (config.host.clone(), config.port);
    let router = app::router(AppState::new(config, db)?);

    slave_framework::server::serve(router, &host, port).await
}