use crate::LogicalAddress;
#[derive(Debug, Clone, PartialEq)]
pub struct DiagnosticMessage<'a> {
pub source_address: LogicalAddress,
pub target_address: LogicalAddress,
pub user_data: UdsBuffer<'a>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum DiagnosticMessagePositiveAckCode {
RoutingConfirmationAck,
Reserved(u8),
}
#[derive(Debug, PartialEq)]
pub struct DiagnosticMessagePositiveAck<'a> {
pub source_address: LogicalAddress,
pub target_address: LogicalAddress,
pub ack_code: DiagnosticMessagePositiveAckCode,
pub previous_diagnostic_message_data: UdsBuffer<'a>,
}
#[derive(Debug, PartialEq)]
pub struct DiagnosticMessageNegativeAck<'a> {
pub source_address: LogicalAddress,
pub target_address: LogicalAddress,
pub ack_code: DiagnosticMessageNegativeAckCode,
pub previous_diagnostic_message_data: UdsBuffer<'a>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum DiagnosticMessageNegativeAckCode {
InvalidSourceAddress,
UnknownTargetAddress,
DiagnosticMessageTooLarge,
OutOfMemory,
TargetUnreachable,
UnknownNetwork,
TransportProtocolError,
Reserved(u8),
}
#[derive(Debug, Clone, PartialEq)]
pub enum UdsBuffer<'a> {
Owned(Vec<u8>),
Borrowed(&'a [u8]),
}
impl UdsBuffer<'_> {
pub fn get_ref(&self) -> &[u8] {
match self {
UdsBuffer::Owned(v) => v.as_ref(),
UdsBuffer::Borrowed(b) => b,
}
}
}