use lambda_runtime::{service_fn, Error, LambdaEvent};
use serde::{Deserialize, Serialize};
use tracing::{info, Level};
use tracing_subscriber::FmtSubscriber;
#[derive(Deserialize)]
struct Request {
#[serde(default)]
name: String,
}
#[derive(Serialize)]
struct Response {
message: String,
request_id: String,
}
async fn function_handler(event: LambdaEvent<Request>) -> Result<Response, Error> {
let (event, context) = event.into_parts();
let request_id = context.request_id;
info!(
message = "Processing serverless function request",
request_id = %request_id,
name = %event.name
);
let name = if event.name.is_empty() {
"World".to_string()
} else {
event.name
};
let message = format!("Hello, {}! Welcome to your FerrisUp serverless function.", name);
Ok(Response {
message,
request_id,
})
}
#[tokio::main]
async fn main() -> Result<(), Error> {
let subscriber = FmtSubscriber::builder()
.with_max_level(Level::INFO)
.finish();
tracing::subscriber::set_global_default(subscriber)?;
info!("FerrisUp AWS Lambda function starting");
lambda_runtime::run(service_fn(function_handler)).await?;
Ok(())
}