This section contains examples for the following frameworks: Tower, Warp, Salvo, Poem, Thruster, and Tide.

Hello World

This example provides a simple “Hello, world!” Rust application that you can deploy with Shuttle. It’s a great starting point for learning how to use Shuttle and getting familiar with the deployment process for Rust applications.

In order to get started, initialize your project with cargo shuttle init and pick the framework you want to use for this example.

Once you are done, your project should be setup with all the required dependencies so go ahead and copy/paste the relevant code snippet from below into your main.rs file.

use std::convert::Infallible;
use std::future::Future;
use std::pin::Pin;
use std::task::{Context, Poll};

#[derive(Clone)]
struct HelloWorld;

impl tower::Service<hyper::Request<hyper::Body>> for HelloWorld {
    type Response = hyper::Response<hyper::Body>;
    type Error = Infallible;
    type Future = Pin<Box<dyn Future<Output = Result<Self::Response, Self::Error>> + Send + Sync>>;

    fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
        Poll::Ready(Ok(()))
    }

    fn call(&mut self, _req: hyper::Request<hyper::Body>) -> Self::Future {
        let body = hyper::Body::from("Hello, world!");
        let resp = hyper::Response::builder()
            .status(200)
            .body(body)
            .expect("Unable to create the `hyper::Response` object");

        let fut = async { Ok(resp) };

        Box::pin(fut)
    }
}

#[shuttle_runtime::main]
async fn tower() -> shuttle_tower::ShuttleTower<HelloWorld> {
    let service = HelloWorld;

    Ok(service.into())
}

Run the example locally with:

cargo shuttle run

In order to deploy the example, simply run:

cargo shuttle deploy