#![feature(structural_match)] pub use whatlang::Lang; #[cfg(feature = "accounts")] pub mod accounts; #[cfg(feature = "carts")] pub mod carts; #[cfg(feature = "emails")] pub mod emails; pub mod mqtt; pub mod rpc; #[cfg(feature = "search")] pub mod search; #[cfg(feature = "stocks")] pub mod stocks; pub trait DeserializePayload { fn deserialize_payload(self, bytes: bytes::Bytes) -> Option; } #[derive(Clone)] pub struct AsyncClient(pub rumqttc::AsyncClient); impl AsyncClient { pub(crate) async fn publish, T: serde::Serialize>( &self, topic: Topic, qos: rumqttc::QoS, retain: bool, t: T, ) -> Result<(), rumqttc::ClientError> { match bincode::serialize(&t) { Ok(v) => { let bytes = bytes::Bytes::from(v); self.0.publish_bytes(topic, qos, retain, bytes).await } Err(e) => { tracing::error!("{}", e); Ok(()) } } } pub(crate) async fn publish_or_log, T: serde::Serialize>( &self, topic: Topic, qos: rumqttc::QoS, retain: bool, t: T, ) { if let Err(e) = self.publish(topic, qos, retain, t).await { tracing::error!("{}", e); } } }