diff options
Diffstat (limited to 'common/mqtt_client/examples/publish_test.rs')
-rw-r--r-- | common/mqtt_client/examples/publish_test.rs | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/common/mqtt_client/examples/publish_test.rs b/common/mqtt_client/examples/publish_test.rs new file mode 100644 index 00000000..e70475f0 --- /dev/null +++ b/common/mqtt_client/examples/publish_test.rs @@ -0,0 +1,53 @@ +use mqtt_client::{Config, Message, QoS, Topic}; + +async fn publish( + config: &Config, + qos: QoS, + payload: impl Into<String>, +) -> Result<(), mqtt_client::Error> { + let topic = Topic::new("test/uubpb9wyi9asi46l624f")?; + let client = config.connect("publisher").await?; + let message = Message::new(&topic, payload.into()).qos(qos); + + let _ = client.publish(message).await?; + client.disconnect().await?; + Ok(()) +} + +async fn pipelined_publish( + config: &Config, + payload: impl Into<String>, +) -> Result<(), mqtt_client::Error> { + let topic = Topic::new("test/uubpb9wyi9asi46l624f")?; + let client = config.connect("publisher").await?; + + let payload: String = payload.into(); + + let message1 = Message::new(&topic, payload.clone()).qos(QoS::ExactlyOnce); + let message2 = Message::new(&topic, payload).qos(QoS::ExactlyOnce); + + let ack1 = client.publish_with_ack(message1).await?; + let ack2 = client.publish_with_ack(message2).await?; + + let () = ack2.await?; + let () = ack1.await?; + + client.disconnect().await?; + Ok(()) +} + +#[tokio::main] +pub async fn main() -> Result<(), Box<dyn std::error::Error>> { + let config = Config::new("test.mosquitto.org", 1883); + let payload = "Hello there!"; + + env_logger::init(); + + publish(&config, QoS::AtMostOnce, payload).await?; + publish(&config, QoS::AtLeastOnce, payload).await?; + publish(&config, QoS::ExactlyOnce, payload).await?; + + pipelined_publish(&config, payload).await?; + + Ok(()) +} |