Skip to main content

rusty_modbus_codec/request/
mod.rs

1//! Modbus request PDU types — decode and encode for every public function code.
2
3mod bit_read;
4mod bit_write;
5pub mod device_id;
6mod diagnostic;
7mod fifo;
8mod file;
9mod mei;
10mod reg_read;
11mod reg_write;
12
13pub use bit_read::{ReadCoilsRequest, ReadDiscreteInputsRequest};
14pub use bit_write::{WriteMultipleCoilsRequest, WriteSingleCoilRequest};
15pub use device_id::ReadDeviceIdentificationRequest;
16pub use diagnostic::DiagnosticsRequest;
17pub use fifo::ReadFifoQueueRequest;
18pub use file::{FileSubRequest, ReadFileRecordRequest, WriteFileRecordRequest};
19pub use mei::EncapsulatedInterfaceRequest;
20pub use reg_read::{ReadHoldingRegistersRequest, ReadInputRegistersRequest};
21pub use reg_write::{
22    MaskWriteRegisterRequest, ReadWriteMultipleRegistersRequest, WriteMultipleRegistersRequest,
23    WriteSingleRegisterRequest,
24};
25
26use crate::error::EncodeError;
27
28/// Trait for encoding a Modbus PDU into a byte buffer.
29pub trait Encode {
30    /// Write the full PDU (function code + data) into `buf`.
31    ///
32    /// Returns the number of bytes written on success.
33    ///
34    /// # Errors
35    ///
36    /// Returns [`EncodeError::BufferTooSmall`] if `buf` is shorter than
37    /// [`encoded_len`](Self::encoded_len). Returns [`EncodeError::PduTooLarge`]
38    /// if the encoded PDU would exceed the Modbus 253-byte ceiling.
39    fn encode_into(&self, buf: &mut [u8]) -> Result<usize, EncodeError>;
40
41    /// Total encoded length in bytes (including the function code byte).
42    fn encoded_len(&self) -> usize;
43}