1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
use crate::DecodeError; /// A type that implements `Emitable` can be serialized. pub trait Emitable { /// Return the length of the serialized data. fn buffer_len(&self) -> usize; /// Serialize this types and write the serialized data into the given buffer. /// /// # Panic /// /// This method panic if the buffer is not big enough. You **must** make sure the buffer is big /// enough before calling this method. You can use /// [`buffer_len()`](trait.Emitable.html#method.buffer_len) to check how big the storage needs /// to be. fn emit(&self, buffer: &mut [u8]); } /// A `Parseable` type can be used to deserialize data into the target type `T` for which it is /// implemented. pub trait Parseable<T> where Self: Sized, { /// Deserialize the current type. fn parse(buf: &T) -> Result<Self, DecodeError>; } /// A `Parseable` type can be used to deserialize data into the target type `T` for which it is /// implemented. pub trait ParseableParametrized<T, P> where Self: Sized, { /// Deserialize the current type. fn parse_with_param(buf: &T, params: P) -> Result<Self, DecodeError>; }