use bytes::BufMut;
use crate::protocol::{
Address,
codec::{BitSize, Encode},
function::{read_multiple, size_argument, size_argument::SizeArgument, write_multiple},
};
#[must_use]
pub struct Args<ReadAddress, ReadValue, WriteAddress, WriteValue> {
read: read_multiple::Args<ReadAddress, ReadValue, size_argument::Words>,
write: write_multiple::Args<WriteAddress, WriteValue, size_argument::Words>,
}
impl<ReadAddress, ReadValue: BitSize, WriteAddress, WriteValue>
Args<ReadAddress, ReadValue, WriteAddress, WriteValue>
{
pub const fn new(
read_address: ReadAddress,
write_address: WriteAddress,
write_value: WriteValue,
) -> Self {
Self {
read: read_multiple::Args::new(read_address),
write: write_multiple::Args::new(write_address, write_value),
}
}
}
impl<ReadAddress, ReadValue, WriteAddress, WriteValue> Encode
for Args<ReadAddress, ReadValue, WriteAddress, WriteValue>
where
ReadAddress: Address,
ReadValue: BitSize,
WriteAddress: Address,
WriteValue: BitSize + Encode,
{
fn encode_to(&self, buf: &mut impl BufMut) {
size_argument::Words::assert_valid_size::<WriteValue, 242>();
self.read.encode_to(buf);
self.write.encode_to(buf);
}
}