use std::{io, pin::Pin};
use bytes::{Bytes, BytesMut};
use serde::{Deserialize, Serialize};
use tokio_serde::{Deserializer, Serializer};
#[derive(Debug)]
pub struct MessagePackFormat;
impl<M> Serializer<M> for MessagePackFormat
where
M: Serialize,
{
type Error = io::Error;
#[inline]
fn serialize(self: Pin<&mut Self>, item: &M) -> Result<Bytes, Self::Error> {
rmp_serde::to_vec(item)
.map(Into::into)
.map_err(|err| io::Error::new(io::ErrorKind::InvalidData, err))
}
}
impl<M> Deserializer<M> for MessagePackFormat
where
for<'de> M: Deserialize<'de>,
{
type Error = io::Error;
#[inline]
fn deserialize(self: Pin<&mut Self>, src: &BytesMut) -> Result<M, Self::Error> {
rmp_serde::from_read_ref(src).map_err(|err| io::Error::new(io::ErrorKind::InvalidData, err))
}
}