use serde::{de::DeserializeOwned, Deserialize, Serialize};
use std::fmt;
#[derive(Deserialize, Serialize, Eq, PartialEq, Ord, PartialOrd, Hash, Default, Clone, Debug)]
pub struct SqsMessage {
body: Option<String>,
}
impl SqsMessage {
#[allow(dead_code)]
fn new() -> Self {
Self::default()
}
fn as_string(&self) -> String {
self.body.clone().unwrap_or_default()
}
}
impl fmt::Display for SqsMessage {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.body.clone() {
Some(s) => write!(f, "{}", &s),
None => write!(f, ""),
}
}
}
#[derive(Deserialize, Serialize, Eq, PartialEq, Ord, PartialOrd, Hash, Default, Clone, Debug)]
pub struct SqsEvent {
#[serde(rename = "Records")]
records: Vec<SqsMessage>,
}
impl SqsEvent {
pub fn into_t<T>(self) -> Vec<T>
where
T: DeserializeOwned + Default,
{
self.records
.into_iter()
.map(move |message| serde_json::from_str(&message.as_string()).unwrap_or_default())
.collect()
}
}
impl fmt::Display for SqsEvent {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
writeln!(f, "[")?;
self.records
.clone()
.into_iter()
.try_for_each(|item| writeln!(f, "{item}"))?;
writeln!(f, "]")
}
}