encode/combinators/
separated.rs1#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
17pub struct Separated<I, S> {
18 encodable_iter: I,
19 separator: S,
20}
21
22impl<I, S> Separated<I, S> {
23 #[inline]
25 pub const fn new(encodable_iter: I, separator: S) -> Self {
26 Self {
27 encodable_iter,
28 separator,
29 }
30 }
31 #[inline]
33 #[must_use]
34 pub fn into_inner(self) -> (I, S) {
35 (self.encodable_iter, self.separator)
36 }
37}
38
39impl<EncodableIter, Separator, Encoder> crate::Encodable<Encoder>
40 for Separated<EncodableIter, Separator>
41where
42 EncodableIter: IntoIterator + Clone,
43 EncodableIter::Item: crate::Encodable<Encoder, Error = Separator::Error>,
44 Separator: crate::Encodable<Encoder>,
45 Encoder: crate::BaseEncoder,
46{
47 type Error = Separator::Error;
48
49 #[inline]
50 fn encode(&self, encoder: &mut Encoder) -> Result<(), Self::Error> {
51 let mut is_first = true;
52
53 for encodable in self.encodable_iter.clone() {
54 if is_first {
55 is_first = false;
56 } else {
57 self.separator.encode(encoder)?;
58 }
59 encodable.encode(encoder)?;
60 }
61 Ok(())
62 }
63}