Skip to content

Instantly share code, notes, and snippets.

@qxf2

qxf2/Cargo.toml Secret

Created February 23, 2022 20:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save qxf2/4b42d2bcdf486b3935fc439ed393a119 to your computer and use it in GitHub Desktop.
Save qxf2/4b42d2bcdf486b3935fc439ed393a119 to your computer and use it in GitHub Desktop.
How to decode an SQS message using Rust
[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"
/*
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