use lambda_http::{Body, Error, Request, RequestExt, Response}; /// This is the main body for the function. /// Write your code inside it. /// There are some code example in the following URLs: /// - https://github.com/awslabs/aws-lambda-rust-runtime/tree/main/examples pub(crate) async fn function_handler(event: Request) -> Result, Error> { // Extract some useful information from the request let who = event .query_string_parameters_ref() .and_then(|params| params.first("name")) .unwrap_or("world"); let message = format!("Hello {who}, this is an AWS Lambda HTTP request"); // Return something that implements IntoResponse. // It will be serialized to the right response event automatically by the runtime let resp = Response::builder() .status(200) .header("content-type", "text/html") .body(message.into()) .map_err(Box::new)?; Ok(resp) } #[cfg(test)] mod tests { use super::*; use std::collections::HashMap; use lambda_http::{Request, RequestExt}; #[tokio::test] async fn test_generic_http_handler() { let request = Request::default(); let response = function_handler(request).await.unwrap(); assert_eq!(response.status(), 200); let body_bytes = response.body().to_vec(); let body_string = String::from_utf8(body_bytes).unwrap(); assert_eq!( body_string, "Hello world, this is an AWS Lambda HTTP request" ); } #[tokio::test] async fn test_http_handler_with_query_string() { let mut query_string_parameters: HashMap = HashMap::new(); query_string_parameters.insert("name".into(), "ymwrust008".into()); let request = Request::default() .with_query_string_parameters(query_string_parameters); let response = function_handler(request).await.unwrap(); assert_eq!(response.status(), 200); let body_bytes = response.body().to_vec(); let body_string = String::from_utf8(body_bytes).unwrap(); assert_eq!( body_string, "Hello ymwrust008, this is an AWS Lambda HTTP request" ); } }