use super::KEY_SIZE;
pub trait Serializable {
fn size(&self) -> usize;
fn get_bytes(&self) -> Vec<u8>;
fn from_bytes(data: &[u8], info: Option<SerializationInfo>) -> Result<Self, SerializationError>
where
Self: Sized;
}
#[derive(Debug, PartialEq, Eq)]
pub enum SerializationError {
MissingInfo(String),
TooFewBytes(usize),
InvalidFormat(String),
CounterOverflow,
AuthenticationFailed,
DecryptionFailed,
}
#[derive(Debug, Clone, Copy)]
pub enum SerializationInfo {
PacketType(u8),
UseEncryption([u8; KEY_SIZE], [u8; KEY_SIZE], Option<[u8; KEY_SIZE]>),
UseAuthentication([u8; KEY_SIZE], Option<[u8; KEY_SIZE]>),
None,
}