use buffer_sv2::{Buffer, BufferPool};
use std::collections::VecDeque;
fn main() {
let mut buffer_pool = BufferPool::new(32);
let mut slices = VecDeque::new();
let write_data = |pool: &mut BufferPool<_>, data: &[u8], slices: &mut VecDeque<_>| {
let writable = pool.get_writable(data.len());
writable.copy_from_slice(data);
let data_slice = pool.get_data_owned();
slices.push_back(data_slice);
println!("{:?}", &pool);
println!();
};
let small_message = b"Hello";
write_data(&mut buffer_pool, small_message, &mut slices);
assert!(buffer_pool.is_back_mode());
assert_eq!(slices.back().unwrap().as_ref(), small_message);
let medium_message = b"Rust programming";
write_data(&mut buffer_pool, medium_message, &mut slices);
assert!(buffer_pool.is_back_mode());
assert_eq!(slices.back().unwrap().as_ref(), medium_message);
let large_message = b"This message is larger than the remaining buffer pool capacity.";
write_data(&mut buffer_pool, large_message, &mut slices);
assert!(buffer_pool.is_alloc_mode());
assert_eq!(slices.back().unwrap().as_ref(), large_message);
while let Some(slice) = slices.pop_front() {
drop(slice);
}
let another_small_message = b"Hi";
write_data(&mut buffer_pool, another_small_message, &mut slices);
assert_eq!(slices.back().unwrap().as_ref(), another_small_message);
assert!(buffer_pool.is_back_mode());
}