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// }