ps_buffer/traits/
into_shared_buffer.rs1use crate::{Buffer, BufferError, SharedBuffer};
2
3pub trait ByteIteratorIntoSharedBuffer {
4 fn into_shared_buffer(self) -> Result<SharedBuffer, BufferError>;
8}
9
10impl<T: Iterator<Item = u8>> ByteIteratorIntoSharedBuffer for T {
11 fn into_shared_buffer(self) -> Result<SharedBuffer, BufferError> {
12 let mut buffer = Buffer::with_capacity(self.size_hint().0)?;
13
14 for byte in self {
15 buffer.push(byte)?;
16 }
17
18 Ok(buffer.share())
19 }
20}
21
22pub trait ByteRefIteratorIntoSharedBuffer {
23 fn into_shared_buffer(self) -> Result<SharedBuffer, BufferError>;
27}
28
29impl<'lt, T: Iterator<Item = &'lt u8>> ByteRefIteratorIntoSharedBuffer for T {
30 fn into_shared_buffer(self) -> Result<SharedBuffer, BufferError> {
31 self.copied().into_shared_buffer()
32 }
33}
34
35pub trait ByteSliceIteratorIntoSharedBuffer {
36 fn into_shared_buffer(self) -> Result<SharedBuffer, BufferError>;
40}
41
42impl<Ts: AsRef<[u8]>, Ti: Iterator<Item = Ts>> ByteSliceIteratorIntoSharedBuffer for Ti {
43 fn into_shared_buffer(self) -> Result<SharedBuffer, BufferError> {
44 let mut buffer = Buffer::new();
45
46 for bytes in self {
47 buffer.extend_from_slice(bytes.as_ref())?;
48 }
49
50 Ok(buffer.share())
51 }
52}