logo

Attribute Macro shuttle_service::main

source · []
#[main]
Expand description

Helper macro that generates the entrypoint required by any service - likely the only macro you need in this crate.

Without shuttle managed services

The simplest usage is when your service does not require any shuttle managed resources, so you only need to return a shuttle supported service:

use rocket::{Build, Rocket};

#[shuttle_service::main]
async fn rocket() -> Result<Rocket<Build>, shuttle_service::Error> {
    let rocket = rocket::build();

    Ok(rocket)
}

shuttle supported services

The following type can take the place of the Ok type and enjoy first class service support in shuttle.

Ok typeService
[Rocket<Build>][rocket]

Getting shuttle managed services

The shuttle is able to manage service dependencies for you. These services are passed in as inputs to your main function:

use rocket::{Build, Rocket};
use sqlx::PgPool;

struct MyState(PgPool);

#[shuttle_service::main]
async fn rocket(pool: PgPool) -> Result<Rocket<Build>, shuttle_service::Error> {
    let state = MyState(pool);
    let rocket = rocket::build().manage(state);

    Ok(rocket)
}

shuttle managed dependencies

The following dependencies can be managed by shuttle:

Argument typeDependency
PgPoolA PostgresSql instance accessed using sqlx