use crate::{Error, data};
pub trait Decoder {
fn decoded_len(&self, data: &[u8]) -> Result<usize, Error>;
fn decode_to_slice(&self, data: &[u8], target: &mut [u8]) -> Result<usize, Error>;
fn append_to_vec(&self, data: &[u8], target: &mut Vec<u8>) -> Result<usize, Error> {
data::util::default_append_to_vec(
data,
target,
|d| self.decoded_len(d),
|d, t| self.decode_to_slice(d, t),
)
}
fn decode_as_vec(&self, data: &[u8]) -> Result<Vec<u8>, Error> {
let mut vec: Vec<u8> = Vec::default();
self.append_to_vec(data, &mut vec)?;
Ok(vec)
}
}