use bytes::Buf;
use bytes::BufMut;
use crate::encoding::varint::decode_varint;
use crate::encoding::varint::encode_varint;
use crate::encoding::varint::encoded_len_varint;
pub use crate::error::DecodeError;
pub use crate::error::EncodeError;
pub use crate::error::UnknownEnumValue;
pub use crate::name::Name;
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 const 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(DecodeError::new("length delimiter exceeds maximum usize value"));
}
Ok(length as usize)
}