#![forbid(unsafe_code)]
use crate::{wire, OxiProtoResult};
use prost::alloc::vec::Vec;
pub trait OxiMessage: Sized + core::fmt::Debug + Default + Send + Sync {
fn encoded_len(&self) -> usize;
fn encode_raw(&self, buf: &mut wire::EncodeBuffer);
fn merge(&mut self, buf: &mut wire::DecodeBuffer) -> OxiProtoResult<()>;
fn clear(&mut self);
fn decode_raw(buf: &mut wire::DecodeBuffer) -> OxiProtoResult<Self> {
let mut me = Self::default();
me.merge(buf)?;
Ok(me)
}
fn encode_to_vec(&self) -> Vec<u8> {
let mut buf = wire::EncodeBuffer::new();
self.encode_raw(&mut buf);
buf.into_vec()
}
fn decode(bytes: &[u8]) -> OxiProtoResult<Self> {
let mut buf = wire::DecodeBuffer::new(bytes);
Self::decode_raw(&mut buf)
}
}