musli_core/en/
sequence_encoder.rs1use crate::Context;
2
3use super::{Encode, Encoder, utils};
4
5pub trait SequenceEncoder {
7 type Cx: Context<Error = Self::Error>;
9 type Error;
11 type Mode: 'static;
13 type EncodeNext<'this>: Encoder<Cx = Self::Cx, Error = Self::Error, Mode = Self::Mode>
15 where
16 Self: 'this;
17
18 fn cx(&self) -> Self::Cx;
20
21 #[must_use = "Encoders must be consumed"]
23 fn encode_next(&mut self) -> Result<Self::EncodeNext<'_>, Self::Error>;
24
25 #[inline]
27 fn push<T>(&mut self, value: T) -> Result<(), Self::Error>
28 where
29 T: Encode<Self::Mode>,
30 {
31 self.encode_next()?.encode(value)?;
32 Ok(())
33 }
34
35 #[inline]
40 fn encode_slice<T>(&mut self, slice: impl AsRef<[T]>) -> Result<(), Self::Error>
41 where
42 T: Encode<Self::Mode>,
43 {
44 utils::default_sequence_encode_slice(self, slice)
45 }
46
47 #[inline]
52 fn encode_slices<T>(
53 &mut self,
54 slices: impl IntoIterator<Item: AsRef<[T]>>,
55 ) -> Result<(), Self::Error>
56 where
57 T: Encode<Self::Mode>,
58 {
59 utils::default_sequence_encode_slices(self, slices)
60 }
61
62 fn finish_sequence(self) -> Result<(), Self::Error>;
64}