1use crate::Context;
2
3use super::{Encode, Encoder, SequenceEncoder};
4
5#[inline]
7pub fn default_encode_slice<E, T>(encoder: E, slice: impl AsRef<[T]>) -> Result<(), E::Error>
8where
9 E: Encoder,
10 T: Encode<E::Mode>,
11{
12 let cx = encoder.cx();
13 let slice = slice.as_ref();
14 let mut seq = encoder.encode_sequence(slice.len())?;
15
16 for (index, item) in slice.iter().enumerate() {
17 cx.enter_sequence_index(index);
18 seq.push(item)?;
19 cx.leave_sequence_index();
20 }
21
22 seq.finish_sequence()
23}
24
25#[inline]
27pub fn default_encode_slices<E, T>(
28 encoder: E,
29 len: usize,
30 slices: impl IntoIterator<Item: AsRef<[T]>>,
31) -> Result<(), E::Error>
32where
33 E: Encoder,
34 T: Encode<E::Mode>,
35{
36 let cx = encoder.cx();
37
38 let mut seq = encoder.encode_sequence(len)?;
39
40 let mut index = 0;
41
42 for slice in slices {
43 for item in slice.as_ref() {
44 cx.enter_sequence_index(index);
45 seq.push(item)?;
46 cx.leave_sequence_index();
47 index = index.wrapping_add(1);
48 }
49 }
50
51 seq.finish_sequence()
52}
53
54#[inline]
56pub fn default_sequence_encode_slice<E, T>(
57 seq: &mut E,
58 slice: impl AsRef<[T]>,
59) -> Result<(), E::Error>
60where
61 E: ?Sized + SequenceEncoder,
62 T: Encode<E::Mode>,
63{
64 let cx = seq.cx();
65
66 let mut index = 0usize;
67
68 for value in slice.as_ref() {
69 cx.enter_sequence_index(index);
70 seq.push(value)?;
71 cx.leave_sequence_index();
72 index = index.wrapping_add(1);
73 }
74
75 Ok(())
76}
77
78#[inline]
80pub fn default_sequence_encode_slices<E, T>(
81 seq: &mut E,
82 slices: impl IntoIterator<Item: AsRef<[T]>>,
83) -> Result<(), E::Error>
84where
85 E: ?Sized + SequenceEncoder,
86 T: Encode<E::Mode>,
87{
88 let cx = seq.cx();
89
90 let mut index = 0usize;
91
92 for slice in slices {
93 for value in slice.as_ref() {
94 cx.enter_sequence_index(index);
95 seq.push(value)?;
96 cx.leave_sequence_index();
97 index = index.wrapping_add(1);
98 }
99 }
100
101 Ok(())
102}