#![doc = include_str!("../README.md")]
#![doc(
html_logo_url = "https://raw.githubusercontent.com/mumbleskates/bilrost/bilrost/logo/bilrost256.jpg"
)]
#![doc(html_root_url = "https://docs.rs/bilrost/0.1010.0")]
#![no_std]
#![forbid(unsafe_op_in_unsafe_fn)]
extern crate alloc;
#[cfg(feature = "std")]
extern crate std;
pub use bytes;
#[cfg(feature = "derive")]
#[doc(hidden)]
pub use bilrost_derive::{DistinguishedMessage, DistinguishedOneof, Enumeration, Message, Oneof};
pub mod buf;
mod error;
mod message;
mod types;
#[doc(hidden)]
pub mod encoding;
#[doc(hidden)]
mod iter;
pub use crate::encoding::{Canonicity, Enumeration, WithCanonicity};
pub use crate::error::{DecodeError, DecodeErrorKind, EncodeError};
pub use crate::message::{DistinguishedMessage, Message};
#[doc(hidden)]
pub use crate::message::{RawDistinguishedMessage, RawMessage};
pub use types::Blob;
use bytes::{Buf, BufMut};
#[cfg(feature = "extended-diagnostics")]
use const_panic::concat_panic;
use crate::encoding::{decode_varint, encode_varint, encoded_len_varint};
#[cfg(not(feature = "no-recursion-limit"))]
const RECURSION_LIMIT: u32 = 100;
#[inline]
pub fn encode_length_delimiter<B>(length: usize, buf: &mut B) -> Result<(), EncodeError>
where
B: BufMut,
{
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(())
}
#[inline(always)]
pub fn length_delimiter_len(length: usize) -> usize {
encoded_len_varint(length as u64)
}
#[inline(always)]
pub fn decode_length_delimiter<B: Buf>(mut buf: B) -> Result<usize, DecodeError> {
decode_varint(&mut buf)?
.try_into()
.map_err(|_| DecodeError::new(DecodeErrorKind::Oversize))
}
#[doc(hidden)]
pub const fn assert_tags_are_equal(failure_description: &str, a: &[u32], b: &[u32]) {
if a.len() != b.len() {
#[cfg(feature = "extended-diagnostics")]
concat_panic!({}: failure_description, ": expected ", a, " but got ", b);
#[cfg(not(feature = "extended-diagnostics"))]
panic!("{}", failure_description);
}
let mut i = 0;
while i < a.len() {
if a[i] != b[i] {
#[cfg(feature = "extended-diagnostics")]
concat_panic!({}: failure_description, ": expected ", a, " but got ", b);
#[cfg(not(feature = "extended-diagnostics"))]
panic!("{}", failure_description);
}
i += 1;
}
}