rama-ttrpc 0.4.0

ttRPC (gRPC for low-memory environments) support for rama
Documentation
use prost::bytes::{BufMut, Bytes, BytesMut};

use super::InvalidInput;

pub trait Encodeable {
    fn encode_raw(&self, buf: &mut impl BufMut) -> Result<(), InvalidInput>;
    fn encoded_len(&self) -> usize;

    fn encode_to_bytes(&self) -> Result<Bytes, InvalidInput> {
        let length = self.encoded_len();
        let mut buf = BytesMut::with_capacity(length);
        self.encode_raw(&mut buf)?;
        Ok(buf.into())
    }
}

impl<T: prost::Message> Encodeable for T {
    fn encode_raw(&self, buf: &mut impl BufMut) -> Result<(), InvalidInput> {
        prost::Message::encode_raw(self, buf);
        Ok(())
    }

    fn encoded_len(&self) -> usize {
        prost::Message::encoded_len(self)
    }
}