-
-
Save qxf2/4b42d2bcdf486b3935fc439ed393a119 to your computer and use it in GitHub Desktop.
How to decode an SQS message using Rust
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[package] | |
name = "joke_of_the_day" | |
version = "0.1.0" | |
authors = ["Qxf2 <blah@qxf2.com>"] | |
edition = "2018" | |
autobins = false | |
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | |
[dependencies] | |
futures = "0.3" # for our async / await blocks | |
tokio = { version = "1.12.0", features = ["full"] } # for our async runtime | |
serde = { version = "1.0", features = ["derive"] } | |
serde_json = "1.0" | |
lambda_runtime = "0.4.1" | |
# Src: https://aws.amazon.com/blogs/opensource/rust-runtime-for-aws-lambda/ | |
[[bin]] | |
name = "bootstrap" | |
path = "src/main.rs" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Example of decoding a (poorly crafted?) SQS message using Rust | |
*/ | |
use lambda_runtime::{Context, Error}; | |
use serde::{Deserialize, Serialize}; | |
use serde_json; | |
#[derive(Deserialize)] | |
struct SkypeListenerMessage { | |
msg: String, | |
chat_id: String, | |
user_id: String, | |
} | |
#[derive(Deserialize)] | |
struct Message{ | |
#[serde(rename = "Message")] | |
message: String, | |
} | |
#[derive(Deserialize)] | |
struct Record { | |
body: String, | |
} | |
#[derive(Deserialize)] | |
struct Event { | |
#[serde(rename = "Records")] | |
records: Vec<Record>, | |
} | |
#[derive(Serialize)] | |
struct Output {//Done just for this example | |
//You will likely have a different structure here once you write you lambda | |
status: String, | |
} | |
#[tokio::main] | |
async fn main() -> Result<(), Error> { | |
let handler = lambda_runtime::handler_fn(handler); | |
lambda_runtime::run(handler).await?; | |
Ok(()) | |
} | |
fn get_message_details(event: Event) -> SkypeListenerMessage{ | |
let body = &event.records[0].body; | |
println!("Body: {}", body); | |
let message_key: Message = serde_json::from_str(body).unwrap(); | |
println!("Message: {}", message_key.message); | |
let message_details: SkypeListenerMessage = serde_json::from_str(&message_key.message).unwrap(); | |
let message = SkypeListenerMessage{ | |
msg: message_details.msg, | |
user_id: message_details.user_id, | |
chat_id: message_details.chat_id, | |
}; | |
println!("Message: {}", message.msg); | |
println!("User ID: {}", message.user_id); | |
println!("Channel: {}", message.chat_id); | |
return message; | |
} | |
async fn handler(event: Event, _context: Context) -> Result<Output, Error> { | |
let message = get_message_details(event); | |
let status = "This is an example".to_string(); | |
Ok(Output { status }) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment