use crate::Context;
use super::{Encode, Encoder};
pub trait EntriesEncoder {
type Cx: Context<Error = Self::Error>;
type Error;
type Mode: 'static;
type EncodeEntryKey<'this>: Encoder<Cx = Self::Cx, Error = Self::Error, Mode = Self::Mode>
where
Self: 'this;
type EncodeEntryValue<'this>: Encoder<Cx = Self::Cx, Error = Self::Error, Mode = Self::Mode>
where
Self: 'this;
fn cx(&self) -> Self::Cx;
#[must_use = "Encoders must be consumed"]
fn encode_entry_key(&mut self) -> Result<Self::EncodeEntryKey<'_>, Self::Error>;
#[must_use = "Encoders must be consumed"]
fn encode_entry_value(&mut self) -> Result<Self::EncodeEntryValue<'_>, Self::Error>;
fn finish_entries(self) -> Result<(), Self::Error>;
#[inline]
fn insert_entry<K, V>(&mut self, key: K, value: V) -> Result<(), Self::Error>
where
K: Encode<Self::Mode>,
V: Encode<Self::Mode>,
{
self.encode_entry_key()?.encode(key)?;
self.encode_entry_value()?.encode(value)?;
Ok(())
}
}