Skip to content

curology/vicuna

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vicuna

GitHub Actions crates.io 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.
        response
    })
}

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

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

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