trapeze 0.2.0

A rust implementation of ttrpc
Documentation
use prost::bytes::{BufMut, Bytes, BytesMut};

use super::{BufMutExt, EncodeError, InvalidInput};

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

    fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError> {
        buf.ensure_capacity(self.encoded_len())?;
        self.encode_raw(buf)?;
        Ok(())
    }

    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)
    }
}