#http-api #api-gateway #lambda #payload #aws #serverless

bin+lib hegel

AWS HTTP API Gateway Payload for Lambda

2 个版本

0.1.1 2022 年 8 月 5 日
0.1.0 2022 年 8 月 4 日

#32 in #payload

MIT 许可证

39KB
665 代码行

黑格尔

AWS HTTP API Gateway Payload for Lambda

安装

[dependencies]
hegel = "0.1.1"

文档

DOCS.RS

简介

黑格尔为 Lambda 提供 AWS HTTP API Gateway 轻量级 Payload

建议与 lambda_runtime 一起使用

黑格尔有两个公开可访问的模块
hegel::authhegel::http

hegel::auth

此模块用于构建 HTTP API 的 API Gateway Lambda Authorizers
有效载荷都设计为 2.0 格式

示例代码

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<auth::Response, Error> {
    // 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))
    }
}

代码位于文件夹 src/bin/auth-example.rs 中。为了避免默认的繁重依赖项 tokio,请记住在构建此 crate 中的二进制文件时添加 --features binary 参数。

hegel::http

此模块用于构建 HTTP API 的 API Gateway Lambda 代理集成
有效载荷都设计为 2.0 格式

示例

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<http::Response, Error> {
    // 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()))
}

代码位于文件夹 src/bin/http-echo.rs 中。为了避免默认的繁重依赖项 tokio,请记住在构建此 crate 中的二进制文件时添加 --features binary 参数。

可选特性

chrono

当您想以 chrono::DateTime 类型获取用户请求时间时启用它

binary

当您想在 src/bin/ 文件夹下构建或检查代码时,请将 --features binary 传递给 cargo

示例

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

许可证

MIT 许可证

依赖关系

~6–17MB
~203K SLoC