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
16KB
227 lines
Vicuna
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