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 38 39 40 41 42 43 44
// SPDX-License-Identifier: MIT
/// 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 from the type `T` for
/// which it is implemented.
pub trait Parseable<T>
where
Self: Sized,
T: ?Sized,
{
type Error;
/// Deserialize the current type.
fn parse(buf: &T) -> Result<Self, Self::Error>;
}
/// A `Parseable` type can be used to deserialize data from the type `T` for
/// which it is implemented.
pub trait ParseableParametrized<T, P>
where
Self: Sized,
T: ?Sized,
{
type Error;
/// Deserialize the current type.
fn parse_with_param(buf: &T, params: P) -> Result<Self, Self::Error>;
}