1use crate::{
2 buffer::{Extendable, Slice, Subsliceable},
3 layout::{Layout, LayoutMut},
4 ArcSlice, ArcSliceMut,
5};
6
7impl<S: Slice<Item = u8> + Subsliceable + ?Sized, L: Layout> bytes::Buf for ArcSlice<S, L> {
8 fn remaining(&self) -> usize {
9 self.len()
10 }
11
12 fn chunk(&self) -> &[u8] {
13 self.to_slice()
14 }
15
16 fn advance(&mut self, cnt: usize) {
17 self.advance(cnt);
18 }
19}
20
21impl<S: Slice<Item = u8> + Subsliceable + ?Sized, L: LayoutMut, const UNIQUE: bool> bytes::Buf
22 for ArcSliceMut<S, L, UNIQUE>
23{
24 fn remaining(&self) -> usize {
25 self.len()
26 }
27
28 fn chunk(&self) -> &[u8] {
29 self.to_slice()
30 }
31
32 fn advance(&mut self, cnt: usize) {
33 self.advance(cnt);
34 }
35}
36
37unsafe impl<S: Slice<Item = u8> + Extendable + ?Sized, L: LayoutMut, const UNIQUE: bool>
38 bytes::BufMut for ArcSliceMut<S, L, UNIQUE>
39{
40 fn remaining_mut(&self) -> usize {
41 self.capacity() - self.len()
42 }
43
44 unsafe fn advance_mut(&mut self, cnt: usize) {
45 unsafe { self.set_len(self.len() + cnt) }
47 }
48
49 fn chunk_mut(&mut self) -> &mut bytes::buf::UninitSlice {
50 unsafe { self.spare_capacity_mut() }.into()
52 }
53}
54
55#[cfg(feature = "inlined")]
56impl<S: Slice<Item = u8> + Subsliceable + ?Sized, L: Layout> bytes::Buf
57 for crate::inlined::SmallSlice<S, L>
58{
59 fn remaining(&self) -> usize {
60 self.len()
61 }
62
63 fn chunk(&self) -> &[u8] {
64 self.to_slice()
65 }
66
67 fn advance(&mut self, cnt: usize) {
68 self.advance(cnt);
69 }
70}
71
72#[cfg(feature = "inlined")]
73impl<S: Slice<Item = u8> + Subsliceable + ?Sized, L: Layout> bytes::Buf
74 for crate::inlined::SmallArcSlice<S, L>
75{
76 fn remaining(&self) -> usize {
77 self.len()
78 }
79
80 fn chunk(&self) -> &[u8] {
81 self.to_slice()
82 }
83
84 fn advance(&mut self, cnt: usize) {
85 self._advance(cnt);
86 }
87}