use anyhow::Error;
use bytes::{BufMut, BytesMut};
use serde::Serialize;
use std::marker::PhantomData;
use tokio_util::codec::Encoder;
pub struct LineDelimitedJsonCodec<T: Serialize> {
_placeholder: PhantomData<T>,
}
impl<T: Serialize> LineDelimitedJsonCodec<T> {
pub fn new() -> Self {
Self {
_placeholder: PhantomData,
}
}
}
impl<T: Serialize> Encoder<T> for LineDelimitedJsonCodec<T> {
type Error = Error;
fn encode(&mut self, item: T, buf: &mut BytesMut) -> Result<(), Error> {
let json = serde_json::to_vec(&item)?;
buf.reserve(json.len() + 1);
buf.put(&json[..]);
buf.put_u8(b'\n');
Ok(())
}
}