use std::ops::Range;
pub fn allocate_range(buffer: &mut Vec<u8>, range: Range<usize>, len: usize) {
let range_len = range.end - range.start;
if range_len != len {
let new_end = range.start + len;
if range_len > len {
buffer.copy_within(range.end.., new_end);
buffer.truncate(new_end + (buffer.len() - range.end));
} else {
let old_len = buffer.len();
buffer.resize(old_len + (len - range_len), 0);
buffer.copy_within(range.end..old_len, new_end);
}
}
}
pub fn replace(buffer: &mut Vec<u8>, range: Range<usize>, content: &[u8]) {
let start = range.start;
allocate_range(buffer, range, content.len());
buffer[start..(start + content.len())].copy_from_slice(content)
}