diff options
author | Marcel Müller <neikos@neikos.email> | 2024-03-21 13:29:03 +0100 |
---|---|---|
committer | Marcel Müller <neikos@neikos.email> | 2024-03-21 13:29:03 +0100 |
commit | 271391d5224e985c4f81ea996a966a1c3d6561d4 (patch) | |
tree | b827803935a03607264e44ed602054c399bf5982 | |
parent | 29916db508a14d0b90eabfa20f84f6795d6036c0 (diff) |
Implement MSuback::write
Signed-off-by: Marcel Müller <neikos@neikos.email>
-rw-r--r-- | mqtt-format/src/v5/packets/suback.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/mqtt-format/src/v5/packets/suback.rs b/mqtt-format/src/v5/packets/suback.rs index ee185a5..6f1e6a2 100644 --- a/mqtt-format/src/v5/packets/suback.rs +++ b/mqtt-format/src/v5/packets/suback.rs @@ -10,6 +10,8 @@ use winnow::Parser; use crate::v5::variable_header::PacketIdentifier; use crate::v5::variable_header::ReasonString; use crate::v5::variable_header::UserProperties; +use crate::v5::write::WResult; +use crate::v5::write::WriteMqttPacket; use crate::v5::MResult; crate::v5::reason_code::make_combined_reason_code! { @@ -76,4 +78,15 @@ impl<'i> MSuback<'i> { }) .parse_next(input) } + + pub async fn write<W: WriteMqttPacket>(&self, buffer: &mut W) -> WResult<W> { + self.packet_identifier.write(buffer).await?; + self.properties.write(buffer).await?; + + // SAFETY: We know SubackReasonCode is a valid u8 + let reasons: &[u8] = + unsafe { core::mem::transmute::<&[SubackReasonCode], &[u8]>(self.reasons) }; + + buffer.write_slice(reasons).await + } } |