use prost::Message as ProstMessage;
use crate::error::{Error, Result};
pub trait Message: ProstMessage + Default + Clone + Send + Sync + 'static {
fn type_name() -> &'static str;
fn decode_from_slice(bytes: &[u8]) -> Result<Self> {
Self::decode(bytes).map_err(Error::from)
}
}
pub fn encode_message<M: Message>(message: &M) -> Result<Vec<u8>> {
let mut buf = Vec::with_capacity(message.encoded_len());
message.encode(&mut buf).map_err(Error::from)?;
Ok(buf)
}
pub fn decode_message<M: Message>(bytes: &[u8]) -> Result<M> {
M::decode_from_slice(bytes)
}
pub fn message_type_name<M: Message>() -> &'static str {
M::type_name()
}