rusty_modbus_codec/request/
fifo.rs1use rusty_modbus_types::{Address, FunctionCode};
4
5use crate::error::{DecodeError, EncodeError};
6use crate::request::Encode;
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12pub struct ReadFifoQueueRequest {
13 pub fifo_pointer_address: Address,
15}
16
17impl ReadFifoQueueRequest {
18 pub fn decode(data: &[u8]) -> Result<Self, DecodeError> {
25 DecodeError::check_exact_len(data, 2)?;
26 let fifo_pointer_address = Address(u16::from_be_bytes([data[0], data[1]]));
27 Ok(Self {
28 fifo_pointer_address,
29 })
30 }
31}
32
33impl Encode for ReadFifoQueueRequest {
34 fn encode_into(&self, buf: &mut [u8]) -> Result<usize, EncodeError> {
35 let len = self.encoded_len();
36 if buf.len() < len {
37 return Err(EncodeError::BufferTooSmall {
38 required: len,
39 available: buf.len(),
40 });
41 }
42 EncodeError::check_pdu_len(len)?;
43 buf[0] = FunctionCode::ReadFifoQueue.code();
44 buf[1..3].copy_from_slice(&self.fifo_pointer_address.0.to_be_bytes());
45 Ok(len)
46 }
47
48 fn encoded_len(&self) -> usize {
49 3
50 }
51}