Skip to main content

trillium_aws_lambda_example/
main.rs

1use askama::Template;
2use trillium::Conn;
3use trillium_askama::AskamaConnExt;
4use trillium_aws_lambda::LambdaConnExt;
5use trillium_cookies::CookiesHandler;
6use trillium_logger::Logger;
7use trillium_router::{Router, RouterConnExt};
8use trillium_sessions::{CookieStore, SessionConnExt, SessionHandler};
9
10#[derive(Template)]
11#[template(path = "hello.html")]
12struct HelloTemplate<'a> {
13    name: &'a str,
14}
15
16fn main() {
17    env_logger::init();
18    trillium_aws_lambda::run((
19        Logger::new(),
20        CookiesHandler::new(),
21        SessionHandler::new(CookieStore::new(), b"01234567890123456789012345678901123"),
22        |conn: Conn| async move {
23            let count = conn.session().get::<usize>("count").unwrap_or_default();
24            let request_id = conn.lambda_context().request_id.clone();
25            conn.with_response_header("request-count", count.to_string())
26                .with_response_header("request-id", request_id)
27                .with_session("count", count + 1)
28        },
29        Router::new()
30            .get("/always-hi", "hi")
31            .post("/", |mut conn: Conn| async move {
32                let body = conn.request_body_string().await.unwrap();
33                conn.ok(format!("request body: {body}"))
34            })
35            .get("/template/:name", |conn: Conn| async move {
36                if let Some(name) = conn.param("name").map(String::from) {
37                    conn.render(HelloTemplate { name: &name })
38                } else {
39                    conn
40                }
41            })
42            .get("/", |conn: Conn| async move { conn.ok("hello world") })
43            .get("/hello/:planet", |conn: Conn| async move {
44                if let Some(planet) = conn.param("planet") {
45                    let response = format!("hello, {planet}");
46                    conn.ok(response)
47                } else {
48                    conn
49                }
50            }),
51    ))
52}