use crate::{DefaultErrorHandler, EncodeErrorHandler, NestedEncodeOutput, codec_err::EncodeError};
use alloc::vec::Vec;
pub trait NestedEncode: Sized {
fn dep_encode<O: NestedEncodeOutput>(&self, dest: &mut O) -> Result<(), EncodeError> {
self.dep_encode_or_handle_err(dest, DefaultErrorHandler)
}
fn dep_encode_or_handle_err<O, H>(&self, dest: &mut O, h: H) -> Result<(), H::HandledErr>
where
O: NestedEncodeOutput,
H: EncodeErrorHandler,
{
match self.dep_encode(dest) {
Ok(()) => Ok(()),
Err(e) => Err(h.handle_error(e)),
}
}
#[doc(hidden)]
#[allow(unused_variables)]
fn if_u8<Output, If, Else, R>(output: Output, if_branch: If, else_branch: Else) -> R
where
If: FnOnce(Output) -> R,
Else: FnOnce(Output) -> R,
{
else_branch(output)
}
}
pub fn dep_encode_to_vec<T: NestedEncode>(obj: &T) -> Result<Vec<u8>, EncodeError> {
let mut bytes = Vec::<u8>::new();
obj.dep_encode(&mut bytes)?;
Ok(bytes)
}