use crate::error::DecodeErrorKind;
pub use crate::error::{DecodeError, EncodeError, UnknownEnumValue};
pub use crate::message::Message;
pub use crate::name::Name;
use bytes::{Buf, BufMut};
use crate::encoding::varint::{decode_varint, encode_varint, encoded_len_varint};
pub fn encode_length_delimiter(length: usize, buf: &mut impl BufMut) -> Result<(), EncodeError> {
let length = length as u64;
let required = encoded_len_varint(length);
let remaining = buf.remaining_mut();
if required > remaining {
return Err(EncodeError::new(required, remaining));
}
encode_varint(length, buf);
Ok(())
}
pub fn length_delimiter_len(length: usize) -> usize {
encoded_len_varint(length as u64)
}
pub fn decode_length_delimiter(mut buf: impl Buf) -> Result<usize, DecodeError> {
let length = decode_varint(&mut buf)?;
if length > usize::MAX as u64 {
return Err(DecodeErrorKind::LengthDelimiterTooLarge.into());
}
Ok(length as usize)
}