asteroid-mq 0.1.0-alpha.3

An embeddable message queue system
Documentation
use bytes::Bytes;
use serde::{de::DeserializeOwned, Serialize};

use super::{EventAttribute, EventCodec};

#[derive(Debug)]
pub struct Json<T: Serialize + DeserializeOwned>(pub T);

impl<T: Serialize + DeserializeOwned> EventCodec for Json<T> {
    fn to_bytes(&self) -> Bytes {
        Bytes::from(serde_json::to_vec(&self.0).expect("the type cannot be converted to json"))
    }
    fn from_bytes(bytes: Bytes) -> Option<Self> {
        serde_json::from_slice(&bytes).ok().map(Json)
    }
}

impl<T> EventAttribute for Json<T>
where
    T: Serialize + DeserializeOwned + EventAttribute,
{
    const SUBJECT: crate::prelude::Subject = T::SUBJECT;
    const BROADCAST: bool = T::BROADCAST;
    const EXPECT_ACK_KIND: crate::prelude::MessageAckExpectKind = T::EXPECT_ACK_KIND;
}