diff --git a/rumqttc/src/v5/client.rs b/rumqttc/src/v5/client.rs index 7a86333f2..5babdb247 100644 --- a/rumqttc/src/v5/client.rs +++ b/rumqttc/src/v5/client.rs @@ -83,11 +83,13 @@ impl AsyncClient { S: Into, P: Into, { - let topic = topic.into(); - let mut publish = Publish::new(&topic, qos, payload, properties); + let topic: String = topic.into(); + let topic_valid = valid_topic(&topic); + let topic_bytes = Bytes::from(topic.into_bytes()); + let mut publish = Publish::new(topic_bytes, qos, payload, properties); publish.retain = retain; let publish = Request::Publish(publish); - if !valid_topic(&topic) { + if !topic_valid { return Err(ClientError::Request(publish)); } self.request_tx.send_async(publish).await?; @@ -137,11 +139,13 @@ impl AsyncClient { S: Into, P: Into, { - let topic = topic.into(); - let mut publish = Publish::new(&topic, qos, payload, properties); + let topic: String = topic.into(); + let topic_valid = valid_topic(&topic); + let topic_bytes = Bytes::from(topic.into_bytes()); + let mut publish = Publish::new(topic_bytes, qos, payload, properties); publish.retain = retain; let publish = Request::Publish(publish); - if !valid_topic(&topic) { + if !topic_valid { return Err(ClientError::TryRequest(publish)); } self.request_tx.try_send(publish)?; @@ -208,11 +212,13 @@ impl AsyncClient { where S: Into, { - let topic = topic.into(); - let mut publish = Publish::new(&topic, qos, payload, properties); + let topic: String = topic.into(); + let topic_valid = valid_topic(&topic); + let topic_bytes = Bytes::from(topic.into_bytes()); + let mut publish = Publish::new(topic_bytes, qos, payload, properties); publish.retain = retain; let publish = Request::Publish(publish); - if !valid_topic(&topic) { + if !topic_valid { return Err(ClientError::TryRequest(publish)); } self.request_tx.send_async(publish).await?; @@ -508,11 +514,13 @@ impl Client { S: Into, P: Into, { - let topic = topic.into(); - let mut publish = Publish::new(&topic, qos, payload, properties); + let topic: String = topic.into(); + let topic_valid = valid_topic(&topic); + let topic_bytes = Bytes::from(topic.into_bytes()); + let mut publish = Publish::new(topic_bytes, qos, payload, properties); publish.retain = retain; let publish = Request::Publish(publish); - if !valid_topic(&topic) { + if !topic_valid { return Err(ClientError::Request(publish)); } self.client.request_tx.send(publish)?; diff --git a/rumqttc/src/v5/mqttbytes/v5/connect.rs b/rumqttc/src/v5/mqttbytes/v5/connect.rs index dfef10621..944c3e44d 100644 --- a/rumqttc/src/v5/mqttbytes/v5/connect.rs +++ b/rumqttc/src/v5/mqttbytes/v5/connect.rs @@ -371,7 +371,7 @@ impl LastWill { retain: bool, properties: Option, ) -> LastWill { - let topic = Bytes::copy_from_slice(topic.into().as_bytes()); + let topic = Bytes::from(topic.into()); LastWill { topic, message: Bytes::from(payload.into()), diff --git a/rumqttc/src/v5/mqttbytes/v5/publish.rs b/rumqttc/src/v5/mqttbytes/v5/publish.rs index e2eee772d..ba4ec1bd0 100644 --- a/rumqttc/src/v5/mqttbytes/v5/publish.rs +++ b/rumqttc/src/v5/mqttbytes/v5/publish.rs @@ -14,13 +14,13 @@ pub struct Publish { } impl Publish { - pub fn new, P: Into>( + pub fn new, P: Into>( topic: T, qos: QoS, payload: P, properties: Option, ) -> Self { - let topic = Bytes::copy_from_slice(topic.into().as_bytes()); + let topic = Bytes::from(topic.into()); Self { qos, topic,