use crate::en::Encoder;
pub trait EncodeBytes<M> {
const ENCODE_BYTES_PACKED: bool = false;
type EncodeBytes: ?Sized + EncodeBytes<M>;
fn encode_bytes<E>(&self, encoder: E) -> Result<(), E::Error>
where
E: Encoder<Mode = M>;
#[inline]
fn size_hint(&self) -> Option<usize> {
None
}
fn as_encode_bytes(&self) -> &Self::EncodeBytes;
}
impl<T, M> EncodeBytes<M> for &T
where
T: ?Sized + EncodeBytes<M>,
{
const ENCODE_BYTES_PACKED: bool = false;
type EncodeBytes = T;
#[inline]
fn encode_bytes<E>(&self, encoder: E) -> Result<(), E::Error>
where
E: Encoder<Mode = M>,
{
(**self).encode_bytes(encoder)
}
#[inline]
fn as_encode_bytes(&self) -> &Self::EncodeBytes {
self
}
}
impl<T, M> EncodeBytes<M> for &mut T
where
T: ?Sized + EncodeBytes<M>,
{
const ENCODE_BYTES_PACKED: bool = false;
type EncodeBytes = T;
#[inline]
fn encode_bytes<E>(&self, encoder: E) -> Result<(), E::Error>
where
E: Encoder<Mode = M>,
{
(**self).encode_bytes(encoder)
}
#[inline]
fn as_encode_bytes(&self) -> &Self::EncodeBytes {
self
}
}