use crate::CodecError;
pub trait EncodeSink {
fn write_all(&mut self, bytes: &[u8]) -> Result<(), CodecError>;
}
pub trait CanonicalEncode {
fn encode<W: EncodeSink + ?Sized>(&self, writer: &mut W) -> Result<(), CodecError>;
}
#[cfg(feature = "alloc")]
impl EncodeSink for alloc::vec::Vec<u8> {
fn write_all(&mut self, bytes: &[u8]) -> Result<(), CodecError> {
self.extend_from_slice(bytes);
Ok(())
}
}
#[cfg(feature = "std")]
impl<T: std::io::Write> EncodeSink for std::io::BufWriter<T> {
fn write_all(&mut self, bytes: &[u8]) -> Result<(), CodecError> {
std::io::Write::write_all(self, bytes).map_err(|_| CodecError::write_failed())
}
}