1use serde::{de::DeserializeOwned, Deserialize, Serialize};
2use std::fmt;
3
4#[derive(Deserialize, Serialize, Eq, PartialEq, Ord, PartialOrd, Hash, Default, Clone, Debug)]
5pub struct SqsMessage {
6 body: Option<String>,
7}
8
9impl SqsMessage {
10 #[allow(dead_code)]
11 fn new() -> Self {
12 Self::default()
13 }
14
15 fn as_string(&self) -> String {
16 self.body.clone().unwrap_or_default()
17 }
18}
19
20impl fmt::Display for SqsMessage {
21 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
22 match self.body.clone() {
23 Some(s) => write!(f, "{}", &s),
24 None => write!(f, ""),
25 }
26 }
27}
28
29#[derive(Deserialize, Serialize, Eq, PartialEq, Ord, PartialOrd, Hash, Default, Clone, Debug)]
31pub struct SqsEvent {
32 #[serde(rename = "Records")]
33 records: Vec<SqsMessage>,
34}
35
36impl SqsEvent {
37 pub fn into_t<T>(self) -> Vec<T>
50 where
51 T: DeserializeOwned + Default,
52 {
53 self.records
54 .into_iter()
55 .map(move |message| serde_json::from_str(&message.as_string()).unwrap_or_default())
56 .collect()
57 }
58}
59
60impl fmt::Display for SqsEvent {
61 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
62 writeln!(f, "[")?;
63 self.records
64 .clone()
65 .into_iter()
66 .try_for_each(|item| writeln!(f, "{}", item))?;
67 writeln!(f, "]")
68 }
69}