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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
// topic.rs // // A set of message parameters to repeatedly publish to the same topic. // // This file is part of the Eclipse Paho MQTT Rust Client library. // /******************************************************************************* * Copyright (c) 2017-2018 Frank Pagliughi <fpagliughi@mindspring.com> * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v1.0 which accompany this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Frank Pagliughi - initial implementation and documentation *******************************************************************************/ use async_client::{AsyncClient}; use token::{Token, DeliveryToken}; use subscribe_options::SubscribeOptions; use message::Message; ///////////////////////////////////////////////////////////////////////////// // Topic ///////////////////////////////////////////////////////////////////////////// /// A topic destination for messages. /// This keeps message parameters for repeatedly publishing to the same /// topic on a server. pub struct Topic<'a> { /// Reference to the broker that will receive the messages. cli: &'a AsyncClient, /// The topic on which to publish the messages. topic: String, /// The QoS level to publish the messages. qos: i32, /// Whether the last message should be retained by the broker. retained: bool, } impl<'a> Topic<'a> { /// Creates a new topic object for publishing messages. /// /// # Arguments /// /// `cli` The client used to publish the messages. /// `topic` The topic on which to publish the messages /// `qos` The quality of service for messages /// pub fn new<T>(cli: &'a AsyncClient, topic: T, qos: i32) -> Topic<'a> where T: Into<String> { Topic { cli, topic: topic.into(), qos, retained: false, } } /// Creates a new topic object for publishing messages. /// /// # Arguments /// /// `cli` The client used to publish the messages. /// `topic` The topic on which to publish the messages /// `qos` The quality of service for messages /// pub fn new_retained<T>(cli: &'a AsyncClient, topic: T, qos: i32) -> Topic<'a> where T: Into<String> { Topic { cli, topic: topic.into(), qos, retained: true, } } /// Subscribe to the topic. pub fn subscribe(&self) -> Token { self.cli.subscribe(self.topic.clone(), self.qos) } /// Subscribe to the topic with subscription options. pub fn subscribe_with_options<T>(&self, opts: T) -> Token where T: Into<SubscribeOptions> { self.cli.subscribe_with_options(self.topic.clone(), self.qos, opts) } /// Publish a message on the topic. /// /// # Arguments /// /// `payload` The payload of the message /// pub fn publish<V>(&self, payload: V) -> DeliveryToken where V: Into<Vec<u8>> { // OPTIMIZE: This could be more efficient. let msg = Message::new(self.topic.clone(), payload, self.qos); self.cli.publish(msg) } }