use bytes::{Buf, BufMut, Bytes, BytesMut};
pub struct ReadBuf {
inner: BytesMut,
}
impl ReadBuf {
pub fn with_capacity(capacity: usize) -> Self {
Self {
inner: BytesMut::with_capacity(capacity),
}
}
pub fn chunk_mut(&mut self) -> &mut [u8] {
let dst = self.inner.chunk_mut();
unsafe { &mut *(dst as *mut _ as *mut [u8]) }
}
pub fn remaining_mut(&self) -> usize {
self.inner.remaining_mut()
}
pub fn advance_mut(&mut self, advance: usize) {
unsafe {
self.inner.advance_mut(advance);
}
}
pub fn into_bytes_mut(mut self, advance: Option<usize>) -> BytesMut {
if let Some(advance) = advance {
self.advance_mut(advance);
}
self.inner
}
pub fn into_bytes(self, advance: Option<usize>) -> Bytes {
self.into_bytes_mut(advance).into()
}
pub fn chunk(&self) -> &[u8] {
self.inner.chunk()
}
pub fn remaining(&self) -> usize {
self.inner.remaining()
}
pub fn split_to(&mut self, at: usize) -> BytesMut {
self.inner.split_to(at)
}
}