1use crate::{Error, data};
2
3pub trait Encoder {
5 fn encoded_len(&self, data: &[u8]) -> Result<usize, Error>;
7
8 fn encode_to_slice(&self, data: &[u8], target: &mut [u8]) -> Result<usize, Error>;
12
13 fn append_to_vec(&self, data: &[u8], target: &mut Vec<u8>) -> Result<usize, Error> {
17 data::util::default_append_to_vec(
18 data,
19 target,
20 |d| self.encoded_len(d),
21 |d, t| self.encode_to_slice(d, t),
22 )
23 }
24
25 fn encode_as_vec(&self, data: &[u8]) -> Result<Vec<u8>, Error> {
29 let mut vec: Vec<u8> = Vec::default();
30 self.append_to_vec(data, &mut vec)?;
31 Ok(vec)
32 }
33}