type Diff<T> = Vec<(u8, u32, u32, Vec<T>, Vec<T>)>;
#[allow(clippy::all)]
pub fn apply(mut source: Vec<u8>, diff: &Diff<u8>) -> Vec<u8> {
for operation in diff.iter() {
let position = operation.1 as usize;
if operation.0 == 0 {
let mut dest = operation.4.clone();
dest.reverse();
source.splice(position..position + dest.len(), dest);
}
if operation.0 == 1 {
let range = position..position;
let mut dest = operation.3.clone();
dest.reverse();
source.splice(range, dest);
}
if operation.0 == 2 {
source.splice(position..position + operation.2 as usize, Vec::new());
}
}
source
}