use crate::logical_address::LogicalAddress;
use automotive_wire_codec::{read_u16_be, write_u16_be};
use super::message_error::MessageError;
use super::traits::{Decode, Encode};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct AliveCheckResponse {
pub source_address: LogicalAddress,
}
impl<'a> Decode<'a> for AliveCheckResponse {
type Error = MessageError;
fn decode(buf: &'a [u8]) -> Result<(Self, &'a [u8]), MessageError> {
let (source_address, rest) = read_u16_be(buf)?;
Ok((
AliveCheckResponse {
source_address: LogicalAddress(source_address),
},
rest,
))
}
}
impl Encode for AliveCheckResponse {
type Error = MessageError;
fn encoded_size(&self) -> Result<usize, MessageError> {
Ok(2)
}
fn encode(&self, writer: &mut impl embedded_io::Write) -> Result<usize, MessageError> {
write_u16_be(writer, self.source_address.into())?;
Ok(2)
}
}