Crates.io | lambda-router-macros |
lib.rs | lambda-router-macros |
version | 0.1.2 |
source | src |
created_at | 2023-09-10 08:06:09.939868 |
updated_at | 2024-05-02 21:14:07.228932 |
description | Macros for use within lambda-router crate |
homepage | https://github.com/evictionapp/lambda-router |
repository | https://github.com/evictionapp/lambda-router |
max_upload_size | |
id | 968706 |
size | 14,255 |
lambda-router
is a simple library to help with routing http-api-gateway
requests to handlers in the same lambda that receive and return json.
Externally tagged
representations for Result<T, E> from your api. Read Serde Docs.First make sure to create a api gateway endpoint
that is http
I am open to adding macro and library support for non http endpoints like lambda function urls but currently I do not use them.
Get started by creating a handler using the router
macro
use lambda_router::router;
use serde::{Serialize, Deserialize};
#[derive(Deserialize)]
struct Input {}
#[derive(Serialize)]
struct Output {}
// you may want to consider using "thiserror" and "serde_with" crate to handle errors
// and serialization when variants or other data structures in your error don't impl Serialize
#[derive(Serialize)]
enum MyError {}
#[router(POST "/my_route")]
async fn my_route(input: Input) -> Result<Output, MyError> {
todo!();
}
inside your entry point to your lambda function that gets the request you use the app
macro to automate writing the if statements that route requests to handlers
use lambda_http::{Body, Error, Request, Response};
// not_found is a fallback route that returns 404 and no body. it is provided for simple 404 responses, you can read about it below.
use lambda_router::{app, not_found};
async fn function_handler(event: Request) -> Result<Response<Body>, Error> {
app! {
event,
my_route,
#[default]
not_found,
}
}
if you just want to return a simple 404 with no body when a request comes in that doesn't match anything, you can use the not_found pre-built default router used above. You can also impl your own like this:
use lambda_http::{Body, Error, Request, Response};
async fn my_custom_404(event: Request) -> Result<Response<Body>, Error> {
todo!();
}