use crate::Buffers;
impl Buffers {
pub fn use_foreign_src<'a, 'src>(&'a mut self, src: &'src [u8]) -> WithForeignSource<'src, 'a> {
self.clear();
WithForeignSource {
ro_src: Some(src),
src: &mut self.src,
dest: &mut self.dest,
}
}
}
impl Buffers {
pub fn clear(&mut self) {
self.src.clear();
self.dest.clear();
}
pub fn swap(&mut self) {
std::mem::swap(&mut self.src, &mut self.dest);
}
}
pub struct WithForeignSource<'src, 'bufs> {
pub ro_src: Option<&'src [u8]>,
pub src: &'bufs mut Vec<u8>,
dest: &'bufs mut Vec<u8>,
}
impl WithForeignSource<'_, '_> {
pub fn swap(&mut self) {
self.ro_src.take();
std::mem::swap(&mut self.src, &mut self.dest);
self.dest.clear();
}
pub fn src_and_dest(&mut self) -> (&[u8], &mut Vec<u8>) {
match self.ro_src {
Some(src) => (src, &mut self.dest),
None => (self.src, &mut self.dest),
}
}
}