fennec_modbus/protocol/function/
read_write_multiple.rs1use bytes::BufMut;
2
3use crate::protocol::{
4 Address,
5 codec::{BitSize, Encode},
6 function::{read_multiple, size_argument, size_argument::SizeArgument, write_multiple},
7};
8
9#[must_use]
33pub struct Args<ReadAddress, ReadValue, WriteAddress, WriteValue> {
34 read: read_multiple::Args<ReadAddress, ReadValue, size_argument::Words>,
35 write: write_multiple::Args<WriteAddress, WriteValue, size_argument::Words>,
36}
37
38impl<ReadAddress, ReadValue: BitSize, WriteAddress, WriteValue>
39 Args<ReadAddress, ReadValue, WriteAddress, WriteValue>
40{
41 pub const fn new(
42 read_address: ReadAddress,
43 write_address: WriteAddress,
44 write_value: WriteValue,
45 ) -> Self {
46 Self {
47 read: read_multiple::Args::new(read_address),
48 write: write_multiple::Args::new(write_address, write_value),
49 }
50 }
51}
52
53impl<ReadAddress, ReadValue, WriteAddress, WriteValue> Encode
54 for Args<ReadAddress, ReadValue, WriteAddress, WriteValue>
55where
56 ReadAddress: Address,
57 ReadValue: BitSize,
58 WriteAddress: Address,
59 WriteValue: BitSize + Encode,
60{
61 fn encode_to(&self, buf: &mut impl BufMut) {
62 size_argument::Words::assert_valid_size::<WriteValue, 242>();
63 self.read.encode_to(buf);
64 self.write.encode_to(buf);
65 }
66}