Hegel

AWS HTTP API Gateway Payload for Lambda

Installation

toml [dependencies] hegel = "0.1.1"

Document

DOCS.RS

Introduction

Hegel provides the lightest AWS HTTP API Gateway Payload for Lambda

It's recommended to use hegel with lambda_runtime

Hegel has two publicly accessible modules:
hegel::auth and hegel::http

hegel::auth

This module is used for building API Gateway Lambda Authorizers for HTTP APIs
The payloads are all designed for format 2.0

example code: ```rust use std::collections::HashMap; use lambdaruntime::{servicefn, Error}; use serde_json; use hegel::auth;

[tokio::main]

async fn main() -> Result<(), Error> { let func = servicefn(func); lambdaruntime::run(func).await?; Ok(()) }

async fn func(req: auth::Event) -> Result { // print to log println!("{}", serdejson::tostring(&req.payload).unwrap()); return match req.payload.path().asstr() { "/" => Ok(auth::Response::newnc(true)), "/pass" => Ok(auth::Response::newnc(true)), "/passwithcontext" => { let mut context = HashMap::new(); context.insert("type".tostring(), "sudo".tostring()); context.insert("usertype".tostring(), "admin".tostring()); Ok(auth::Response::new(true, context)) }, "/deny" => Ok(auth::Response::newnc(false)), "/denywithcontext" => { let mut context = HashMap::new(); context.insert("type".tostring(), "failed".tostring()); context.insert("usertype".tostring(), "visitor".tostring()); Ok(auth::Response::new(true, context)) } _ => Ok(auth::Response::new_nc(true)) } } `` The code is available under foldersrc/bin/auth-example.rs To avoid the heavy dependencytokioas default, remember to add--features binary` param when building the binary in this crate

hegel::http

This module is used for building API Gateway Lambda proxy integrations for HTTP APIs
The payloads are all designed for format 2.0

example: ```rust use lambdaruntime::{servicefn, Error}; use serde_json; use hegel::http;

[tokio::main]

async fn main() -> Result<(), Error> { let func = servicefn(func); lambdaruntime::run(func).await?; Ok(()) }

async fn func(req: http::Event) -> Result { // print to log println!("{}", serdejson::tostring(&req.payload).unwrap()); let js = serdejson::tostring(&req.payload); if js.iserr() {return Ok(http::Response::newstatus(500).bodytext("Can not encode as json".tostring()))} return Ok(http::Response::new_json(js.unwrap())) } `` The code is available under foldersrc/bin/http-echo.rs To avoid the heavy dependencytokioas default, remember to add--features binary` param when building the binary in this crate

Optional features

chrono

Enable it when you want to get user request datetime in chrono::DateTime type

binary

Pass --features binary to cargo when you want to build or check codes under folder src/bin/

example: shell $ cd ${the path to this repo} $ cargo check --features binary $ cargo lambda build --release --features binary $ cargo lambda build --release --arm64 --features binary

LICENSE

MIT LICENSE