embedded_mqttc/packet.rs
1// use core::usize;
2
3// use mqttrs2::{Connack, Packet, Pid, Publish, QosPid, Suback};
4
5// use crate::MqttError;
6
7// use heapless::{String, Vec};
8
9// pub struct OwnedPublish<const BUFFER: usize, const TOPIC_SIZE: usize> {
10// pub dup: bool,
11// pub qospid: QosPid,
12// pub retain: bool,
13// pub topic_name: String<TOPIC_SIZE>,
14// pub payload: Vec<u8, BUFFER>
15// }
16
17// impl<const BUFFER: usize, const TOPIC_SIZE: usize> OwnedPublish<BUFFER, TOPIC_SIZE> {
18
19// pub fn borrow<'a>(&'a self) -> Packet<'a> {
20// Packet::Publish(Publish{
21// dup: self.dup,
22// qospid: self.qospid,
23// retain: self.retain,
24// topic_name: &self.topic_name,
25// payload: &self.payload
26// })
27// }
28// }
29
30// impl <'a, const BUFFER: usize, const TOPIC_SIZE: usize> TryFrom<&Publish<'a>> for OwnedPublish<BUFFER, TOPIC_SIZE> {
31// type Error = MqttError;
32
33// fn try_from(value: &Publish<'a>) -> Result<Self, Self::Error> {
34// Ok(Self {
35// dup: value.dup,
36// qospid: value.qospid,
37// retain: value.retain,
38// topic_name: String::try_from(value.topic_name)
39// .map_err(|_| MqttError::BufferError(embytes_buffer_async::BufferError::NoCapacity))?, // TODO map another error
40// payload: Vec::try_from(value.payload)
41// .map_err(|_| MqttError::BufferError(embytes_buffer_async::BufferError::NoCapacity))?, // TODO map another error
42// })
43// }
44// }
45
46// impl <'a, const BUFFER: usize, const TOPIC_SIZE: usize> TryFrom<Publish<'a>> for OwnedPublish<BUFFER, TOPIC_SIZE> {
47// type Error = MqttError;
48
49// fn try_from(value: Publish<'a>) -> Result<Self, Self::Error> {
50// Self::try_from(&value)
51// }
52// }
53
54// pub enum ReceivedPacket<const BUFFER: usize, const TOPIC_SIZE: usize> {
55// Connack(Connack),
56// Publish(OwnedPublish<BUFFER, TOPIC_SIZE>),
57// Puback(Pid),
58// Pubrec(Pid),
59// Pubrel(Pid),
60// Pubcomp(Pid),
61// Suback(Suback),
62// Unsuback(Pid),
63// Pingresp,
64// Disconnect,
65// }
66
67// impl <'a, const BUFFER: usize, const TOPIC_SIZE: usize> TryFrom<Packet<'_>> for ReceivedPacket<BUFFER, TOPIC_SIZE> {
68// type Error = MqttError;
69
70// fn try_from(value: Packet<'_>) -> Result<Self, Self::Error> {
71// match value {
72// Packet::Connack(connack) => Ok(Self::Connack(connack)),
73// Packet::Publish(publish) => Ok(Self::Publish(OwnedPublish::try_from(publish)?)),
74// Packet::Puback(pid) => Ok(Self::Puback(pid)),
75// Packet::Pubrec(pid) => Ok(Self::Pubrec(pid)),
76// Packet::Pubrel(pid) => Ok(Self::Pubrel(pid)),
77// Packet::Pubcomp(pid) => Ok(Self::Pubcomp(pid)),
78// Packet::Suback(suback) => Ok(Self::Suback(suback)),
79// Packet::Unsuback(pid) => Ok(Self::Unsuback(pid)),
80// Packet::Pingresp => Ok(Self::Pingresp),
81// Packet::Disconnect => Ok(Self::Disconnect),
82
83// // These packets cannot be received
84// // Packet::Connect(connect) => todo!(),
85// // Packet::Subscribe(subscribe) => todo!(),
86// // Packet::Unsubscribe(unsubscribe) => todo!(),
87// // Packet::Pingreq => todo!(),
88// _ => Err(MqttError::InternalError)
89// }
90// }
91// }