smol_bytes/bytes_mut/
iter.rs1use crate::strategy::ImmutableStorage;
2
3use super::*;
4
5impl<'a> Extend<&'a [u8]> for BytesMut {
6 #[cfg_attr(not(coverage), inline(always))]
7 fn extend<T: IntoIterator<Item = &'a [u8]>>(&mut self, iter: T) {
8 for slice in iter {
9 self.extend_from_slice(slice);
10 }
11 }
12}
13
14impl<'a> Extend<&'a u8> for BytesMut {
15 #[cfg_attr(not(coverage), inline(always))]
16 fn extend<T: IntoIterator<Item = &'a u8>>(&mut self, iter: T) {
17 self.extend(iter.into_iter().copied());
18 }
19}
20
21impl Extend<u8> for BytesMut {
22 #[cfg_attr(not(coverage), inline(always))]
23 fn extend<T: IntoIterator<Item = u8>>(&mut self, iter: T) {
24 let iter = iter.into_iter();
25
26 let (lower, _) = iter.size_hint();
27 self.reserve(lower);
28
29 for b in iter {
30 self.put_u8(b);
31 }
32 }
33}
34
35impl Extend<bytes::Bytes> for BytesMut {
36 #[cfg_attr(not(coverage), inline(always))]
37 fn extend<T: IntoIterator<Item = bytes::Bytes>>(&mut self, iter: T) {
38 for bytes in iter {
39 self.extend_from_slice(&bytes);
40 }
41 }
42}
43
44impl<S> Extend<RawBytes<S>> for BytesMut
45where
46 RawBytes<S>: ImmutableStorage,
47{
48 #[cfg_attr(not(coverage), inline(always))]
49 fn extend<T: IntoIterator<Item = RawBytes<S>>>(&mut self, iter: T) {
50 for smol_bytes in iter {
51 self.extend_from_slice(smol_bytes.as_ref());
52 }
53 }
54}
55
56impl FromIterator<u8> for BytesMut {
57 #[cfg_attr(not(coverage), inline(always))]
58 fn from_iter<T: IntoIterator<Item = u8>>(iter: T) -> Self {
59 let mut smol_bytes_mut = BytesMut::new();
60 smol_bytes_mut.extend(iter);
61 smol_bytes_mut
62 }
63}
64
65impl<'a> FromIterator<&'a u8> for BytesMut {
66 #[cfg_attr(not(coverage), inline(always))]
67 fn from_iter<T: IntoIterator<Item = &'a u8>>(iter: T) -> Self {
68 Self::from_iter(iter.into_iter().copied())
69 }
70}
71
72impl<'a> FromIterator<&'a [u8]> for BytesMut {
73 #[cfg_attr(not(coverage), inline(always))]
74 fn from_iter<T: IntoIterator<Item = &'a [u8]>>(iter: T) -> Self {
75 let mut smol_bytes_mut = BytesMut::new();
76
77 for slice in iter {
78 smol_bytes_mut.extend_from_slice(slice);
79 }
80 smol_bytes_mut
81 }
82}
83
84impl IntoIterator for BytesMut {
85 type Item = u8;
86 type IntoIter = ::bytes::buf::IntoIter<BytesMut>;
87
88 #[cfg_attr(not(coverage), inline(always))]
89 fn into_iter(self) -> Self::IntoIter {
90 ::bytes::buf::IntoIter::new(self)
91 }
92}
93
94impl<'a> IntoIterator for &'a BytesMut {
95 type Item = &'a u8;
96 type IntoIter = core::slice::Iter<'a, u8>;
97
98 #[cfg_attr(not(coverage), inline(always))]
99 fn into_iter(self) -> Self::IntoIter {
100 self.as_ref().iter()
101 }
102}