use std::fmt::Display;
use serde::{Deserialize, Serialize, de::DeserializeOwned};
use serde_json::Value;
#[derive(Debug, Serialize, Deserialize)]
pub(crate) struct Response<T: Serialize> {
pub event: String,
pub data: T,
}
#[derive(Debug, Serialize, Deserialize)]
pub(crate) struct Request {
pub event: String,
pub data: Value,
}
#[derive(Clone, Debug)]
pub struct Payload {
data: Value,
}
impl Payload {
pub(crate) fn new(data: Value) -> Self {
Self { data }
}
pub fn parse<T: DeserializeOwned>(&self) -> Result<T, serde_json::Error> {
serde_json::from_value(self.data.clone())
}
pub fn raw(&self) -> String {
self.data.to_string()
}
}
impl Display for Payload {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.data)
}
}