rseip_core/codec/encode/
slice.rs1use super::*;
8
9pub struct SliceContainer<'a, T> {
10 inner: &'a [T],
11 bytes_count: Option<usize>,
12}
13
14impl<'a, T> SliceContainer<'a, T> {
15 #[inline]
16 pub fn new(inner: &'a [T]) -> Self {
17 Self {
18 inner,
19 bytes_count: None,
20 }
21 }
22
23 #[inline]
25 pub fn with_bytes_count(mut self, size: usize) -> Self {
26 self.bytes_count = Some(size);
27 self
28 }
29}
30
31impl<'a, T> Encode for SliceContainer<'a, T>
32where
33 T: Encode,
34{
35 #[inline]
36 fn encode_by_ref<A: Encoder>(
37 &self,
38 buf: &mut BytesMut,
39 encoder: &mut A,
40 ) -> Result<(), A::Error> {
41 for item in self.inner.iter() {
42 item.encode_by_ref(buf, encoder)?;
43 }
44 Ok(())
45 }
46
47 #[inline]
48 fn bytes_count(&self) -> usize {
49 if let Some(v) = self.bytes_count {
50 v
51 } else {
52 self.inner.iter().map(|v| v.bytes_count()).sum()
53 }
54 }
55}