use ace_core::DiagError;
use ace_uds::UdsError;
use heapless::format;
use crate::header::ProtocolVersion;
#[derive(Debug, PartialEq, Eq)]
pub enum DoipValidationError {
UnsupportedProtocolVersion(u8),
InvalidInverseProtocolVersion {
version: ProtocolVersion,
inverse: u8,
},
UnknownPayloadType(u16),
PayloadLengthMismatch { declared: u32, actual: usize },
FrameTooShort { actual: usize },
InvalidSourceAddress(u16),
InvalidTargetAddress(u16),
UnknownActivationType(u8),
UnknownNackCode(u8),
}
#[derive(Debug)]
pub enum DoipError {
Transport(DiagError),
Validation(DoipValidationError),
Parse(heapless::String<64>),
}
impl From<DiagError> for DoipError {
fn from(e: DiagError) -> Self {
DoipError::Transport(e)
}
}
impl From<DoipValidationError> for DoipError {
fn from(e: DoipValidationError) -> Self {
DoipError::Validation(e)
}
}
impl From<UdsError> for DoipError {
fn from(e: UdsError) -> Self {
DoipError::Parse(format!("{:?}", e).unwrap_or_default())
}
}