use crate::custom_serde::*;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct SnsEvent {
pub records: Vec<SnsRecord>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct SnsRecord {
pub event_source: String,
pub event_version: String,
pub event_subscription_arn: String,
pub sns: SnsMessage,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct SnsMessage {
#[serde(rename = "Type")]
pub sns_message_type: String,
pub message_id: String,
pub topic_arn: String,
#[serde(deserialize_with = "deserialize_lambda_string")]
pub subject: Option<String>,
pub timestamp: DateTime<Utc>,
pub signature_version: String,
pub signature: String,
pub signing_cert_url: String,
pub unsubscribe_url: String,
pub message: String,
#[serde(deserialize_with = "deserialize_lambda_map")]
pub message_attributes: HashMap<String, MessageAttribute>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct MessageAttribute {
#[serde(rename = "Type")]
pub data_type: String,
#[serde(rename = "Value")]
pub value: String,
}
#[cfg(test)]
mod test {
use super::*;
extern crate serde_json;
#[test]
#[cfg(feature = "sns")]
fn my_example_sns_event() {
let data = include_bytes!("../generated/fixtures/example-sns-event.json");
let parsed: SnsEvent = serde_json::from_slice(data).unwrap();
println!("{:?}", parsed);
let output: String = serde_json::to_string(&parsed).unwrap();
let reparsed: SnsEvent = serde_json::from_slice(output.as_bytes()).unwrap();
assert_eq!(parsed, reparsed);
}
}