use bytes::{Bytes, BytesMut};
pub(crate) struct FixedBuffer {
buffer: BytesMut,
capacity: usize,
truncated: bool,
}
impl FixedBuffer {
pub fn new(capacity: usize) -> Self {
FixedBuffer {
buffer: BytesMut::new(),
capacity,
truncated: false,
}
}
pub fn write_to_buffer(&mut self, data: &Bytes) {
if !self.truncated && (self.buffer.len() + data.len() <= self.capacity) {
self.buffer.extend_from_slice(data);
} else {
self.truncated = true;
}
}
pub fn clear(&mut self) {
self.truncated = false;
self.buffer.clear();
}
pub fn is_empty(&self) -> bool {
self.buffer.len() == 0
}
pub fn is_truncated(&self) -> bool {
self.truncated
}
pub fn get_buffer(&self) -> Option<Bytes> {
if !self.is_empty() {
Some(self.buffer.clone().freeze())
} else {
None
}
}
}