1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
#![cfg_attr(not(test), no_std)] mod requests; use heapless::{String, Vec}; pub use mqttrs::{QoS, SubscribeTopic}; pub use requests::{PublishRequest, Request, SubscribeRequest, UnsubscribeRequest}; #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum MqttError { Full, Borrow, Overflow, } pub trait Mqtt { fn send(&self, request: Request<'_>) -> Result<(), MqttError>; fn client_id(&self) -> &str; fn publish(&self, topic_name: &str, payload: &[u8], qos: QoS) -> Result<(), MqttError> { let req: Request = PublishRequest { dup: false, qos, retain: false, topic_name, payload, } .into(); self.send(req) } fn subscribe(&self, topic: SubscribeTopic) -> Result<(), MqttError> { let req: Request = SubscribeRequest { topics: Vec::from_slice(&[topic]).unwrap(), } .into(); self.send(req) } fn subscribe_many(&self, topics: Vec<SubscribeTopic, 5>) -> Result<(), MqttError> { let req: Request = SubscribeRequest { topics }.into(); self.send(req) } fn unsubscribe(&self, topic: String<256>) -> Result<(), MqttError> { let req: Request = UnsubscribeRequest { topics: Vec::from_slice(&[topic]).unwrap(), } .into(); self.send(req) } fn unsubscribe_many(&self, topics: Vec<String<256>, 5>) -> Result<(), MqttError> { let req: Request = UnsubscribeRequest { topics }.into(); self.send(req) } }