Skip to content

Commit a87a4e4

Browse files
committed
(rust): Parse the event in lambda handler
1 parent b613fb7 commit a87a4e4

File tree

4 files changed

+54
-11
lines changed

4 files changed

+54
-11
lines changed

lambda/rust/Cargo.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lambda/rust/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,6 @@ edition = "2021"
77
aws_lambda_events = { version = "0.15.1", default-features = false, features = ["sqs"] }
88

99
lambda_runtime = "0.13.0"
10+
serde = { version = "1.0.219", features = ["derive"] }
11+
serde_json = "1.0.140"
1012
tokio = { version = "1", features = ["macros"] }

lambda/rust/src/event_handler.rs

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,67 @@
1-
use lambda_runtime::{tracing, Error, LambdaEvent};
21
use aws_lambda_events::event::sqs::SqsEvent;
2+
use lambda_runtime::{Error, LambdaEvent};
3+
use serde::{Deserialize, Serialize};
4+
use serde_json;
35

4-
/// This is the main body for the function.
5-
/// Write your code inside it.
6-
/// There are some code example in the following URLs:
7-
/// - https://github.com/awslabs/aws-lambda-rust-runtime/tree/main/examples
8-
/// - https://github.com/aws-samples/serverless-rust-demo/
9-
pub(crate)async fn function_handler(event: LambdaEvent<SqsEvent>) -> Result<(), Error> {
6+
#[derive(Deserialize, Serialize, Default)]
7+
pub struct User {
8+
id: String,
9+
session_id: String,
10+
devide_id: Option<String>,
11+
}
12+
13+
#[derive(Deserialize, Serialize, Default)]
14+
pub struct Event {
15+
event_id: String,
16+
user: User,
17+
emitter_code: u32,
18+
action: String,
19+
}
20+
21+
pub(crate) async fn function_handler(lambda_event: LambdaEvent<SqsEvent>) -> Result<(), Error> {
1022
// Extract some useful information from the request
11-
let payload = event.payload;
12-
tracing::info!("Payload: {:?}", payload);
23+
let payload = lambda_event.payload;
24+
for message in payload.records {
25+
let event: Event = serde_json::from_str(&message.body.unwrap()).unwrap();
26+
}
1327

1428
Ok(())
1529
}
1630

1731
#[cfg(test)]
1832
mod tests {
1933
use super::*;
34+
use aws_lambda_events::sqs::SqsMessage;
2035
use lambda_runtime::{Context, LambdaEvent};
36+
use std::collections::HashMap;
37+
38+
fn build_message(body: &str) -> SqsMessage {
39+
SqsMessage {
40+
message_id: None,
41+
receipt_handle: None,
42+
aws_region: None,
43+
body: Some(body.to_string()),
44+
md5_of_body: None,
45+
md5_of_message_attributes: None,
46+
event_source: None,
47+
event_source_arn: None,
48+
attributes: HashMap::new(),
49+
message_attributes: HashMap::new(),
50+
}
51+
}
52+
53+
fn build_event(body: &str) -> SqsEvent {
54+
SqsEvent {
55+
records: vec![build_message(body)],
56+
}
57+
}
2158

2259
#[tokio::test]
2360
async fn test_event_handler() {
24-
let event = LambdaEvent::new(SqsEvent::default(), Context::default());
61+
let event = LambdaEvent::new(
62+
build_event(&serde_json::to_string(&Event::default()).unwrap()),
63+
Context::default(),
64+
);
2565
let response = function_handler(event).await.unwrap();
2666
assert_eq!((), response);
2767
}

lambda/rust/src/main.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use lambda_runtime::{run, service_fn, tracing, Error};
33
mod event_handler;
44
use event_handler::function_handler;
55

6-
76
#[tokio::main]
87
async fn main() -> Result<(), Error> {
98
tracing::init_default_subscriber();

0 commit comments

Comments
 (0)