async_compression/
util.rs1pub fn _assert_send<T: Send>() {}
2pub fn _assert_sync<T: Sync>() {}
3
4#[derive(Debug, Default)]
5pub struct PartialBuffer<B: AsRef<[u8]>> {
6 buffer: B,
7 index: usize,
8}
9
10impl<B: AsRef<[u8]>> PartialBuffer<B> {
11 pub(crate) fn new(buffer: B) -> Self {
12 Self { buffer, index: 0 }
13 }
14
15 pub(crate) fn written(&self) -> &[u8] {
16 &self.buffer.as_ref()[..self.index]
17 }
18
19 pub(crate) fn unwritten(&self) -> &[u8] {
20 &self.buffer.as_ref()[self.index..]
21 }
22
23 pub(crate) fn advance(&mut self, amount: usize) {
24 self.index += amount;
25 }
26
27 pub(crate) fn get_mut(&mut self) -> &mut B {
28 &mut self.buffer
29 }
30
31 pub(crate) fn into_inner(self) -> B {
32 self.buffer
33 }
34
35 pub(crate) fn reset(&mut self) {
36 self.index = 0;
37 }
38}
39
40impl<B: AsRef<[u8]> + AsMut<[u8]>> PartialBuffer<B> {
41 pub(crate) fn unwritten_mut(&mut self) -> &mut [u8] {
42 &mut self.buffer.as_mut()[self.index..]
43 }
44
45 pub(crate) fn copy_unwritten_from<C: AsRef<[u8]>>(
46 &mut self,
47 other: &mut PartialBuffer<C>,
48 ) -> usize {
49 let len = std::cmp::min(self.unwritten().len(), other.unwritten().len());
50
51 self.unwritten_mut()[..len].copy_from_slice(&other.unwritten()[..len]);
52
53 self.advance(len);
54 other.advance(len);
55 len
56 }
57}
58
59impl<B: AsRef<[u8]> + Default> PartialBuffer<B> {
60 pub(crate) fn take(&mut self) -> Self {
61 std::mem::replace(self, Self::new(B::default()))
62 }
63}
64
65impl<B: AsRef<[u8]> + AsMut<[u8]>> From<B> for PartialBuffer<B> {
66 fn from(buffer: B) -> Self {
67 Self::new(buffer)
68 }
69}