Skip to main content

smol_bytes/bytes_mut/
iter.rs

1use 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 FromIterator<bytes::Bytes> for BytesMut {
85  #[cfg_attr(not(coverage), inline(always))]
86  fn from_iter<T: IntoIterator<Item = bytes::Bytes>>(iter: T) -> Self {
87    let mut smol_bytes_mut = BytesMut::new();
88    smol_bytes_mut.extend(iter);
89    smol_bytes_mut
90  }
91}
92
93impl<S> FromIterator<RawBytes<S>> for BytesMut
94where
95  RawBytes<S>: ImmutableStorage,
96{
97  #[cfg_attr(not(coverage), inline(always))]
98  fn from_iter<T: IntoIterator<Item = RawBytes<S>>>(iter: T) -> Self {
99    let mut smol_bytes_mut = BytesMut::new();
100    smol_bytes_mut.extend(iter);
101    smol_bytes_mut
102  }
103}
104
105impl IntoIterator for BytesMut {
106  type Item = u8;
107  type IntoIter = ::bytes::buf::IntoIter<BytesMut>;
108
109  #[cfg_attr(not(coverage), inline(always))]
110  fn into_iter(self) -> Self::IntoIter {
111    ::bytes::buf::IntoIter::new(self)
112  }
113}
114
115impl<'a> IntoIterator for &'a BytesMut {
116  type Item = &'a u8;
117  type IntoIter = core::slice::Iter<'a, u8>;
118
119  #[cfg_attr(not(coverage), inline(always))]
120  fn into_iter(self) -> Self::IntoIter {
121    self.as_ref().iter()
122  }
123}