Skip to content
Open
24 changes: 23 additions & 1 deletion src/buf/chain.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::buf::{IntoIter, UninitSlice};
use crate::{Buf, BufMut, Bytes};
use crate::{Buf, BufMut, Bytes, SeekBuf};

#[cfg(feature = "std")]
use std::io::IoSlice;
Expand Down Expand Up @@ -188,6 +188,28 @@ where
}
}

impl<T, U> SeekBuf for Chain<T, U>
where
T: SeekBuf,
U: SeekBuf,
{
fn chunk_from(&self, start: usize) -> Option<&[u8]> {
if start < self.a.remaining() {
self.a.chunk_from(start)
} else {
self.b.chunk_from(start - self.a.remaining())
}
}

fn chunk_to(&self, end: usize) -> Option<&[u8]> {
if end <= self.a.remaining() {
self.a.chunk_to(end)
} else {
self.b.chunk_to(end - self.a.remaining())
}
}
}

unsafe impl<T, U> BufMut for Chain<T, U>
where
T: BufMut,
Expand Down
Loading