8 unstable releases (3 breaking)

0.4.1 Jan 9, 2020
0.4.0 Dec 27, 2019
0.3.0 Dec 26, 2019
0.2.0 Dec 26, 2019
0.1.3 Dec 14, 2019

#72 in #serverless

MIT license

16KB
227 lines

Vicuna

GitHub Actions Released API docs MIT licensed

AWS Lambdas in Rust made simple.

  • Simple, middleware-based interface
  • Naturally modular design
  • Purpose-built for serverless-rust

⚠️ Active Development: Vicuna's API has not stabalized and may change without warning between releases!

📦 Install

Add the following to your Cargo.toml file.

[dependencies]
vicuna = "0.4.1"

🤸 Usage

💡 This crate is intended to be paired with the serverless-rust plugin.

Vicuna produces handlers which take in a Lambda request and produce an appropriate response. The simplest handler is the default_handler provided by the crate:

use vicuna::{default_handler, lambda_http::lambda};

fn main() {
    lambda!(default_handler())
}

Handlers can be composed from middleware which can handle the request-response lifecycle in an arbitrary fashion. For example, custom middleware can be written like so:

use vicuna::Handler;

fn my_middleware(handler: Handler) -> Handler {
    Box::new(move |request, context| {
        // Resolve upstream middleware chain into a response...
        let mut response = handler(request, context);
        // ...mutate response as desired.
        Ok(response)
    })
}

Middleware are wrapped around handlers, which themselves produce a handler for chainable invocation:

use vicuna::{
    default_handler,
    lambda_http::lambda,
    middleware::{body, header},
    Handler,
    WrappingHandler,
};

fn main() {
    lambda!(default_handler()
        .wrap_with(body("Hello, world!"))
        .wrap_with(header("x-foo", "bar"))
        .handler())
}

Dependencies

~13–21MB
~305K SLoC