Skip to content

Commit

Permalink
perf(rumqttc): avoid creation of temporary vec while validating packet
Browse files Browse the repository at this point in the history
  • Loading branch information
arunanshub committed Mar 28, 2024
1 parent e7ef9f3 commit 3ffebb3
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 17 deletions.
11 changes: 4 additions & 7 deletions rumqttc/src/client.rs
Expand Up @@ -181,9 +181,8 @@ impl AsyncClient {
where
T: IntoIterator<Item = SubscribeFilter>,
{
let topics = topics.into_iter().collect::<Vec<_>>();
let is_err = topics.iter().any(|t| !valid_filter(&t.path));
let subscribe = Subscribe::new_many(topics);
let subscribe = Subscribe::new_many(topics.into_iter());
let is_err = subscribe.filters.iter().any(|t| !valid_filter(&t.path));
let request = Request::Subscribe(subscribe);
if is_err {
return Err(ClientError::Request(request));
Expand All @@ -197,9 +196,8 @@ impl AsyncClient {
where
T: IntoIterator<Item = SubscribeFilter>,
{
let topics = topics.into_iter().collect::<Vec<_>>();
let is_err = topics.iter().any(|t| !valid_filter(&t.path));
let subscribe = Subscribe::new_many(topics);
let is_err = subscribe.filters.iter().any(|t| !valid_filter(&t.path));
let request = Request::Subscribe(subscribe);
if is_err {
return Err(ClientError::Request(request));
Expand Down Expand Up @@ -373,9 +371,8 @@ impl Client {
where
T: IntoIterator<Item = SubscribeFilter>,
{
let topics = topics.into_iter().collect::<Vec<_>>();
let is_err = topics.iter().any(|t| !valid_filter(&t.path));
let subscribe = Subscribe::new_many(topics);
let is_err = subscribe.filters.iter().any(|t| !valid_filter(&t.path));
let request = Request::Subscribe(subscribe);
if is_err {
return Err(ClientError::Request(request));
Expand Down
4 changes: 2 additions & 2 deletions rumqttc/src/mqttbytes/v4/subscribe.rs
Expand Up @@ -21,10 +21,10 @@ impl Subscribe {
}
}

pub fn new_many(topics: impl AsRef<[SubscribeFilter]>) -> Subscribe {
pub fn new_many(topics: impl IntoIterator<Item = SubscribeFilter>) -> Subscribe {
Subscribe {
pkid: 0,
filters: topics.as_ref().to_vec(),
filters: topics.into_iter().collect(),
}
}

Expand Down
9 changes: 3 additions & 6 deletions rumqttc/src/v5/client.rs
Expand Up @@ -322,9 +322,8 @@ impl AsyncClient {
where
T: IntoIterator<Item = Filter>,
{
let topics = topics.into_iter().collect::<Vec<_>>();
let is_err = topics.iter().any(|t| !valid_filter(&t.path));
let subscribe = Subscribe::new_many(topics, properties);
let is_err = subscribe.filters.iter().any(|t| !valid_filter(&t.path));
let request = Request::Subscribe(subscribe);
if is_err {
return Err(ClientError::Request(request));
Expand Down Expand Up @@ -360,9 +359,8 @@ impl AsyncClient {
where
T: IntoIterator<Item = Filter>,
{
let topics = topics.into_iter().collect::<Vec<_>>();
let is_err = topics.iter().any(|t| !valid_filter(&t.path));
let subscribe = Subscribe::new_many(topics, properties);
let is_err = subscribe.filters.iter().any(|t| !valid_filter(&t.path));
let request = Request::Subscribe(subscribe);
if is_err {
return Err(ClientError::TryRequest(request));
Expand Down Expand Up @@ -666,9 +664,8 @@ impl Client {
where
T: IntoIterator<Item = Filter>,
{
let topics = topics.into_iter().collect::<Vec<_>>();
let is_err = topics.iter().any(|t| !valid_filter(&t.path));
let subscribe = Subscribe::new_many(topics, properties);
let is_err = subscribe.filters.iter().any(|t| !valid_filter(&t.path));
let request = Request::Subscribe(subscribe);
if is_err {
return Err(ClientError::Request(request));
Expand Down
4 changes: 2 additions & 2 deletions rumqttc/src/v5/mqttbytes/v5/subscribe.rs
Expand Up @@ -19,11 +19,11 @@ impl Subscribe {
}

pub fn new_many(
filters: impl AsRef<[Filter]>,
filters: impl IntoIterator<Item = Filter>,
properties: Option<SubscribeProperties>,
) -> Self {
Self {
filters: filters.as_ref().to_vec(),
filters: filters.into_iter().collect(),
properties,
..Default::default()
}
Expand Down

0 comments on commit 3ffebb3

Please sign in to comment.