use crate::common::GenericHeader;
use super::dis_error::DISError;
use bytes::{Buf, BytesMut};
use std::any::Any;
pub trait Pdu {
type Header: GenericHeader + Default;
fn calculate_length(&self) -> Result<u16, DISError>;
fn header(&self) -> &Self::Header;
fn header_mut(&mut self) -> &mut Self::Header;
fn finalize(&mut self) {
let len = self.calculate_length();
self.header_mut().set_length(len.unwrap_or_default());
}
fn serialize(&mut self, buf: &mut BytesMut) -> Result<(), DISError>;
fn deserialize<B: Buf>(buf: &mut B) -> Result<Self, DISError>
where
Self: Sized;
fn deserialize_without_header<B: Buf>(
buffer: &mut B,
pdu_header: Self::Header,
) -> Result<Self, DISError>
where
Self: Sized;
fn as_any(&self) -> &dyn Any;
}