# Hegel AWS **H**TTP API **G**at**e**way Payload for **L**ambda ## Installation ```toml [dependencies] hegel = "0.1.1" ``` ## Document [DOCS.RS](https://docs.rs/hegel) ## Introduction Hegel provides the lightest AWS HTTP API Gateway Payload for Lambda It's recommended to use hegel with [lambda_runtime](https://github.com/awslabs/aws-lambda-rust-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 lambda_runtime::{service_fn, Error}; use serde_json; use hegel::auth; #[tokio::main] async fn main() -> Result<(), Error> { let func = service_fn(func); lambda_runtime::run(func).await?; Ok(()) } async fn func(req: auth::Event) -> Result { // print to log println!("{}", serde_json::to_string(&req.payload).unwrap()); return match req.payload.path().as_str() { "/" => Ok(auth::Response::new_nc(true)), "/pass" => Ok(auth::Response::new_nc(true)), "/pass_with_context" => { let mut context = HashMap::new(); context.insert("type".to_string(), "sudo".to_string()); context.insert("user_type".to_string(), "admin".to_string()); Ok(auth::Response::new(true, context)) }, "/deny" => Ok(auth::Response::new_nc(false)), "/deny_with_context" => { let mut context = HashMap::new(); context.insert("type".to_string(), "failed".to_string()); context.insert("user_type".to_string(), "visitor".to_string()); Ok(auth::Response::new(true, context)) } _ => Ok(auth::Response::new_nc(true)) } } ``` The code is available under folder `src/bin/auth-example.rs` To avoid the heavy dependency `tokio` as 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 lambda_runtime::{service_fn, Error}; use serde_json; use hegel::http; #[tokio::main] async fn main() -> Result<(), Error> { let func = service_fn(func); lambda_runtime::run(func).await?; Ok(()) } async fn func(req: http::Event) -> Result { // print to log println!("{}", serde_json::to_string(&req.payload).unwrap()); let js = serde_json::to_string(&req.payload); if js.is_err() {return Ok(http::Response::new_status(500).body_text("Can not encode as json".to_string()))} return Ok(http::Response::new_json(js.unwrap())) } ``` The code is available under folder `src/bin/http-echo.rs` To avoid the heavy dependency `tokio` as 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