trillium_aws_lambda_example/
main.rs1use 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}