[INFO] crate tokio-mqttc 0.0.2 is already in cache [INFO] extracting crate tokio-mqttc 0.0.2 into work/ex/clippy-test-run/sources/stable/reg/tokio-mqttc/0.0.2 [INFO] extracting crate tokio-mqttc 0.0.2 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/tokio-mqttc/0.0.2 [INFO] validating manifest of tokio-mqttc-0.0.2 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of tokio-mqttc-0.0.2 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing tokio-mqttc-0.0.2 [INFO] finished frobbing tokio-mqttc-0.0.2 [INFO] frobbed toml for tokio-mqttc-0.0.2 written to work/ex/clippy-test-run/sources/stable/reg/tokio-mqttc/0.0.2/Cargo.toml [INFO] started frobbing tokio-mqttc-0.0.2 [INFO] finished frobbing tokio-mqttc-0.0.2 [INFO] frobbed toml for tokio-mqttc-0.0.2 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/tokio-mqttc/0.0.2/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting tokio-mqttc-0.0.2 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/tokio-mqttc/0.0.2:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 42ed32bccd3e6aee3d48abd9dadcba1ddcd6aa4c0bf3043f73639359522f5197 [INFO] running `"docker" "start" "-a" "42ed32bccd3e6aee3d48abd9dadcba1ddcd6aa4c0bf3043f73639359522f5197"` [INFO] [stderr] Checking futures-mutex v0.1.2 [INFO] [stderr] Checking nom-test-helpers v2.0.0 [INFO] [stderr] Checking touch v0.0.1 [INFO] [stderr] Checking bincode v0.9.2 [INFO] [stderr] Checking linked-hash-map v0.5.1 [INFO] [stderr] Checking tokio-mqttc v0.0.2 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:106:21 [INFO] [stderr] | [INFO] [stderr] 106 | ty: ty, [INFO] [stderr] | ^^^^^^ help: replace it with: `ty` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:184:13 [INFO] [stderr] | [INFO] [stderr] 184 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:185:13 [INFO] [stderr] | [INFO] [stderr] 185 | payload: payload, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `payload` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:205:13 [INFO] [stderr] | [INFO] [stderr] 205 | flags: flags, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `flags` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:206:13 [INFO] [stderr] | [INFO] [stderr] 206 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:217:13 [INFO] [stderr] | [INFO] [stderr] 217 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:228:13 [INFO] [stderr] | [INFO] [stderr] 228 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:239:13 [INFO] [stderr] | [INFO] [stderr] 239 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:250:13 [INFO] [stderr] | [INFO] [stderr] 250 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:262:13 [INFO] [stderr] | [INFO] [stderr] 262 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:279:13 [INFO] [stderr] | [INFO] [stderr] 279 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/tokio/mqtt_loop.rs:281:13 [INFO] [stderr] | [INFO] [stderr] 281 | keep_alive: keep_alive, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `keep_alive` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/tokio/mqtt_loop.rs:282:13 [INFO] [stderr] | [INFO] [stderr] 282 | handle: handle, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `handle` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/tokio/mqtt_loop.rs:285:13 [INFO] [stderr] | [INFO] [stderr] 285 | sources: sources, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `sources` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/tokio/outbound_handlers/mod.rs:45:26 [INFO] [stderr] | [INFO] [stderr] 45 | RequestHandler { inner: inner } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `inner` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/tokio/inbound_handlers/mod.rs:41:27 [INFO] [stderr] | [INFO] [stderr] 41 | ResponseHandler { inner: inner } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `inner` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:106:21 [INFO] [stderr] | [INFO] [stderr] 106 | ty: ty, [INFO] [stderr] | ^^^^^^ help: replace it with: `ty` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:184:13 [INFO] [stderr] | [INFO] [stderr] 184 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:185:13 [INFO] [stderr] | [INFO] [stderr] 185 | payload: payload, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `payload` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:205:13 [INFO] [stderr] | [INFO] [stderr] 205 | flags: flags, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `flags` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:206:13 [INFO] [stderr] | [INFO] [stderr] 206 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:217:13 [INFO] [stderr] | [INFO] [stderr] 217 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:228:13 [INFO] [stderr] | [INFO] [stderr] 228 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:239:13 [INFO] [stderr] | [INFO] [stderr] 239 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:250:13 [INFO] [stderr] | [INFO] [stderr] 250 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:262:13 [INFO] [stderr] | [INFO] [stderr] 262 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/proto/mod.rs:279:13 [INFO] [stderr] | [INFO] [stderr] 279 | headers: headers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `headers` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/tokio/mqtt_loop.rs:281:13 [INFO] [stderr] | [INFO] [stderr] 281 | keep_alive: keep_alive, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `keep_alive` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/tokio/mqtt_loop.rs:282:13 [INFO] [stderr] | [INFO] [stderr] 282 | handle: handle, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `handle` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/tokio/mqtt_loop.rs:285:13 [INFO] [stderr] | [INFO] [stderr] 285 | sources: sources, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `sources` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/tokio/outbound_handlers/mod.rs:45:26 [INFO] [stderr] | [INFO] [stderr] 45 | RequestHandler { inner: inner } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `inner` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/tokio/inbound_handlers/mod.rs:41:27 [INFO] [stderr] | [INFO] [stderr] 41 | ResponseHandler { inner: inner } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `inner` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: unused import: `Error` [INFO] [stderr] --> src/proto/types.rs:4:14 [INFO] [stderr] | [INFO] [stderr] 4 | use errors::{Error, ErrorKind}; [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `linked_hash_map::LinkedHashMap` [INFO] [stderr] --> src/proto/types.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | use linked_hash_map::LinkedHashMap; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:55:29 [INFO] [stderr] | [INFO] [stderr] 55 | const USERNAME = 0b10000000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b1000_0000` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:56:29 [INFO] [stderr] | [INFO] [stderr] 56 | const PASSWORD = 0b01000000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0100_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:57:29 [INFO] [stderr] | [INFO] [stderr] 57 | const WILL_RETAIN = 0b00100000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:58:29 [INFO] [stderr] | [INFO] [stderr] 58 | const WILL_QOS2 = 0b00010000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:59:29 [INFO] [stderr] | [INFO] [stderr] 59 | const WILL_QOS1 = 0b00001000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_1000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:60:29 [INFO] [stderr] | [INFO] [stderr] 60 | const WILL_FLAG = 0b00000100, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0100` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:61:29 [INFO] [stderr] | [INFO] [stderr] 61 | const CLEAN_SESS = 0b00000010, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0010` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unused imports: `IResult`, `be_u16` [INFO] [stderr] --> src/proto/headers.rs:3:11 [INFO] [stderr] | [INFO] [stderr] 3 | use nom::{IResult, be_u16}; [INFO] [stderr] | ^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io` [INFO] [stderr] --> src/proto/mod.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use std::io; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Entry` [INFO] [stderr] --> src/proto/mod.rs:12:23 [INFO] [stderr] | [INFO] [stderr] 12 | use linked_hash_map::{Entry,LinkedHashMap}; [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Writer` [INFO] [stderr] --> src/proto/mod.rs:13:38 [INFO] [stderr] | [INFO] [stderr] 13 | use bytes::{Bytes, BytesMut, BufMut, Writer}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `self::headers::*` [INFO] [stderr] --> src/proto/mod.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | use self::headers::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/proto/mod.rs:36:5 [INFO] [stderr] | [INFO] [stderr] 36 | return Some(collect.freeze()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(collect.freeze())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/proto/mod.rs:113:39 [INFO] [stderr] | [INFO] [stderr] 113 | IResult::Incomplete(_) => return Ok(None), [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/persistence/memory.rs:12:9 [INFO] [stderr] | [INFO] [stderr] 12 | return "Error in the memory persistence"; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `"Error in the memory persistence"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/mqtt_loop.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `MqttFramedWriter` [INFO] [stderr] --> src/tokio/mqtt_loop.rs:21:13 [INFO] [stderr] | [INFO] [stderr] 21 | MqttFramedWriter, MqttFramedReader, SubscriptionSender, SourceItem, SourceError, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::response::ResponseProcessor` [INFO] [stderr] --> src/tokio/mqtt_loop.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | use super::response::ResponseProcessor; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::request::RequestProcessor` [INFO] [stderr] --> src/tokio/mqtt_loop.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | use super::request::RequestProcessor; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/tokio/mqtt_loop.rs:56:16 [INFO] [stderr] | [INFO] [stderr] 56 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 57 | | if let Err(e) = init_rx.wait().map_err(|_| ErrorKind::LoopCommsError)? { [INFO] [stderr] 58 | | Ok((State::Closed, Err(e))) [INFO] [stderr] 59 | | } else { [INFO] [stderr] 60 | | Ok((next_state(sender), Ok(rx.boxed()))) [INFO] [stderr] 61 | | } [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 56 | } else if let Err(e) = init_rx.wait().map_err(|_| ErrorKind::LoopCommsError)? { [INFO] [stderr] 57 | Ok((State::Closed, Err(e))) [INFO] [stderr] 58 | } else { [INFO] [stderr] 59 | Ok((next_state(sender), Ok(rx.boxed()))) [INFO] [stderr] 60 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/tokio/mqtt_loop.rs:129:18 [INFO] [stderr] | [INFO] [stderr] 129 | _ => return Err(ErrorKind::ClientUnavailable.into()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(ErrorKind::ClientUnavailable.into())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/tokio/mqtt_loop.rs:380:50 [INFO] [stderr] | [INFO] [stderr] 380 | Some(ClientRequest { ty: _, ret, ack }) => { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: Try with `ClientRequest { ret, ack, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/tokio/response.rs:88:13 [INFO] [stderr] | [INFO] [stderr] 88 | / return Err(SourceError::ProcessResponse( [INFO] [stderr] 89 | | ErrorKind::from(ProtoErrorKind::ConnectionRefused(*crc)) [INFO] [stderr] 90 | | .into(), [INFO] [stderr] 91 | | )); [INFO] [stderr] | |_______________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 88 | Err(SourceError::ProcessResponse( [INFO] [stderr] 89 | ErrorKind::from(ProtoErrorKind::ConnectionRefused(*crc)) [INFO] [stderr] 90 | .into(), [INFO] [stderr] 91 | )) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:1:16 [INFO] [stderr] | [INFO] [stderr] 1 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncSink`, `Sink` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:2:28 [INFO] [stderr] | [INFO] [stderr] 2 | use futures::{Poll, Async, AsyncSink, Sink, Future}; [INFO] [stderr] | ^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `PacketId`, `PacketType`, `QualityOfService` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:9:25 [INFO] [stderr] | [INFO] [stderr] 9 | use proto::{MqttPacket, PacketType, QualityOfService, PacketId}; [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ErrorKind`, `ResultExt` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:10:29 [INFO] [stderr] | [INFO] [stderr] 10 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `PublishState` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:12:25 [INFO] [stderr] | [INFO] [stderr] 12 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple}; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/outbound_handlers/publish.rs:1:16 [INFO] [stderr] | [INFO] [stderr] 1 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncSink`, `Sink` [INFO] [stderr] --> src/tokio/outbound_handlers/publish.rs:2:28 [INFO] [stderr] | [INFO] [stderr] 2 | use futures::{Poll, Async, AsyncSink, Sink, Future}; [INFO] [stderr] | ^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/outbound_handlers/publish.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `PacketType` [INFO] [stderr] --> src/tokio/outbound_handlers/publish.rs:9:25 [INFO] [stderr] | [INFO] [stderr] 9 | use proto::{MqttPacket, PacketType, QualityOfService, PacketId}; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `OneTimeKey` [INFO] [stderr] --> src/tokio/outbound_handlers/publish.rs:12:13 [INFO] [stderr] | [INFO] [stderr] 12 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple}; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `BoxFuture` [INFO] [stderr] --> src/tokio/outbound_handlers/mod.rs:8:27 [INFO] [stderr] | [INFO] [stderr] 8 | use tokio::{RequestTuple, BoxFuture}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:3:16 [INFO] [stderr] | [INFO] [stderr] 3 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AsyncSink` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:4:28 [INFO] [stderr] | [INFO] [stderr] 4 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::unsync::mpsc::UnboundedSender` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::unsync::mpsc::UnboundedSender; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `PacketType`, `QualityOfService`, `TopicName` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:11:25 [INFO] [stderr] | [INFO] [stderr] 11 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] 12 | PacketId, TopicName}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ResultExt`, `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:14:21 [INFO] [stderr] | [INFO] [stderr] 14 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `PublishState`, `RequestTuple` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:17:25 [INFO] [stderr] | [INFO] [stderr] 17 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture}; [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:4:16 [INFO] [stderr] | [INFO] [stderr] 4 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AsyncSink` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:5:28 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::sync::mpsc::unbounded` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::sync::mpsc::unbounded; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::unsync::mpsc::UnboundedSender` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use futures::unsync::mpsc::UnboundedSender; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `PacketType`, `QualityOfService`, `TopicName` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:12:25 [INFO] [stderr] | [INFO] [stderr] 12 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] 13 | PacketId, TopicName}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ResultExt`, `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:15:21 [INFO] [stderr] | [INFO] [stderr] 15 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `PublishState`, `RequestTuple`, `SubItem`, `TopicFilter` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:18:25 [INFO] [stderr] | [INFO] [stderr] 18 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture}; [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:4:16 [INFO] [stderr] | [INFO] [stderr] 4 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncSink`, `Poll` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:5:15 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::sync::mpsc::unbounded` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use futures::sync::mpsc::unbounded; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::unsync::mpsc::UnboundedSender` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use futures::unsync::mpsc::UnboundedSender; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `MqttPacket`, `PacketId`, `PacketType`, `Payload`, `QualityOfService`, `TopicName` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] 14 | PacketId, TopicName}; [INFO] [stderr] | ^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ErrorKind`, `ResultExt`, `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:16:21 [INFO] [stderr] | [INFO] [stderr] 16 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `errors::proto::ErrorKind as ProtoErrorKind` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | use errors::proto::ErrorKind as ProtoErrorKind; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `PublishState`, `RequestTuple`, `SubItem`, `TopicFilter` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:19:25 [INFO] [stderr] | [INFO] [stderr] 19 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture}; [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::collections::hash_map::Entry` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use std::collections::hash_map::Entry; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:5:16 [INFO] [stderr] | [INFO] [stderr] 5 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncSink`, `Sink` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:6:28 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::sync::mpsc::unbounded` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use futures::sync::mpsc::unbounded; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `PacketType` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:13:25 [INFO] [stderr] | [INFO] [stderr] 13 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ErrorKind`, `ResultExt`, `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:16:21 [INFO] [stderr] | [INFO] [stderr] 16 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `ClientReturn`, `OneTimeKey`, `RequestTuple`, `SubItem`, `TopicFilter` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::collections::hash_map::Entry` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use std::collections::hash_map::Entry; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bytes::Bytes` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use bytes::Bytes; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:5:16 [INFO] [stderr] | [INFO] [stderr] 5 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncSink`, `Poll` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:6:15 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::sync::mpsc::unbounded` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use futures::sync::mpsc::unbounded; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::unsync::mpsc::UnboundedSender` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use futures::unsync::mpsc::UnboundedSender; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `PacketType`, `Payload`, `QualityOfService`, `TopicName` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:14:25 [INFO] [stderr] | [INFO] [stderr] 14 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] 15 | PacketId, TopicName}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:17:21 [INFO] [stderr] | [INFO] [stderr] 17 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `OneTimeKey`, `RequestTuple`, `SubItem`, `TopicFilter` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:20:13 [INFO] [stderr] | [INFO] [stderr] 20 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture}; [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::collections::hash_map::Entry` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use std::collections::hash_map::Entry; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bytes::Bytes` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use bytes::Bytes; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:5:16 [INFO] [stderr] | [INFO] [stderr] 5 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AsyncSink` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:6:28 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::sync::mpsc::unbounded` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use futures::sync::mpsc::unbounded; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `PacketType`, `Payload`, `QualityOfService`, `TopicName` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:13:25 [INFO] [stderr] | [INFO] [stderr] 13 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] 14 | PacketId, TopicName}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:16:21 [INFO] [stderr] | [INFO] [stderr] 16 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `ClientReturn`, `OneTimeKey`, `RequestTuple`, `SubItem`, `TopicFilter` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::collections::hash_map::Entry` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use std::collections::hash_map::Entry; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:5:16 [INFO] [stderr] | [INFO] [stderr] 5 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncSink`, `Sink` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:6:28 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::sync::mpsc::unbounded` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use futures::sync::mpsc::unbounded; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `PacketType`, `QualityOfService` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:13:25 [INFO] [stderr] | [INFO] [stderr] 13 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ErrorKind`, `ResultExt`, `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:16:21 [INFO] [stderr] | [INFO] [stderr] 16 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `ClientReturn`, `OneTimeKey`, `RequestTuple`, `SubItem`, `TopicFilter` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::BoxFuture': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/types.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use futures::future::BoxFuture; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::stream::BoxStream': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/types.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::stream::BoxStream; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::BoxFuture': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/types.rs:7:29 [INFO] [stderr] | [INFO] [stderr] 7 | pub type BoxMqttFuture = BoxFuture; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::stream::BoxStream': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/types.rs:9:29 [INFO] [stderr] | [INFO] [stderr] 9 | pub type BoxMqttStream = BoxStream; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'tokio_io::codec::Framed': Moved to tokio-codec [INFO] [stderr] --> src/tokio/mod.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use tokio_io::codec::Framed; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'tokio_io::codec::Framed': Moved to tokio-codec [INFO] [stderr] --> src/tokio/mod.rs:27:40 [INFO] [stderr] | [INFO] [stderr] 27 | type MqttFramedReader = SplitStream>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'tokio_io::codec::Framed': Moved to tokio-codec [INFO] [stderr] --> src/tokio/mod.rs:28:38 [INFO] [stderr] | [INFO] [stderr] 28 | type MqttFramedWriter = SplitSink>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Error` [INFO] [stderr] --> src/proto/types.rs:4:14 [INFO] [stderr] | [INFO] [stderr] 4 | use errors::{Error, ErrorKind}; [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `linked_hash_map::LinkedHashMap` [INFO] [stderr] --> src/proto/types.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | use linked_hash_map::LinkedHashMap; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:55:29 [INFO] [stderr] | [INFO] [stderr] 55 | const USERNAME = 0b10000000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b1000_0000` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:56:29 [INFO] [stderr] | [INFO] [stderr] 56 | const PASSWORD = 0b01000000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0100_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:57:29 [INFO] [stderr] | [INFO] [stderr] 57 | const WILL_RETAIN = 0b00100000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:58:29 [INFO] [stderr] | [INFO] [stderr] 58 | const WILL_QOS2 = 0b00010000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:59:29 [INFO] [stderr] | [INFO] [stderr] 59 | const WILL_QOS1 = 0b00001000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_1000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:60:29 [INFO] [stderr] | [INFO] [stderr] 60 | const WILL_FLAG = 0b00000100, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0100` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/proto/types.rs:61:29 [INFO] [stderr] | [INFO] [stderr] 61 | const CLEAN_SESS = 0b00000010, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0010` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unused imports: `IResult`, `be_u16` [INFO] [stderr] --> src/proto/headers.rs:3:11 [INFO] [stderr] | [INFO] [stderr] 3 | use nom::{IResult, be_u16}; [INFO] [stderr] | ^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io` [INFO] [stderr] --> src/proto/mod.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use std::io; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Entry` [INFO] [stderr] --> src/proto/mod.rs:12:23 [INFO] [stderr] | [INFO] [stderr] 12 | use linked_hash_map::{Entry,LinkedHashMap}; [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Writer` [INFO] [stderr] --> src/proto/mod.rs:13:38 [INFO] [stderr] | [INFO] [stderr] 13 | use bytes::{Bytes, BytesMut, BufMut, Writer}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `self::headers::*` [INFO] [stderr] --> src/proto/mod.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | use self::headers::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/proto/mod.rs:36:5 [INFO] [stderr] | [INFO] [stderr] 36 | return Some(collect.freeze()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(collect.freeze())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/proto/mod.rs:113:39 [INFO] [stderr] | [INFO] [stderr] 113 | IResult::Incomplete(_) => return Ok(None), [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/persistence/memory.rs:12:9 [INFO] [stderr] | [INFO] [stderr] 12 | return "Error in the memory persistence"; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `"Error in the memory persistence"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/mqtt_loop.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `MqttFramedWriter` [INFO] [stderr] --> src/tokio/mqtt_loop.rs:21:13 [INFO] [stderr] | [INFO] [stderr] 21 | MqttFramedWriter, MqttFramedReader, SubscriptionSender, SourceItem, SourceError, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::response::ResponseProcessor` [INFO] [stderr] --> src/tokio/mqtt_loop.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | use super::response::ResponseProcessor; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::request::RequestProcessor` [INFO] [stderr] --> src/tokio/mqtt_loop.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | use super::request::RequestProcessor; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/tokio/mqtt_loop.rs:56:16 [INFO] [stderr] | [INFO] [stderr] 56 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 57 | | if let Err(e) = init_rx.wait().map_err(|_| ErrorKind::LoopCommsError)? { [INFO] [stderr] 58 | | Ok((State::Closed, Err(e))) [INFO] [stderr] 59 | | } else { [INFO] [stderr] 60 | | Ok((next_state(sender), Ok(rx.boxed()))) [INFO] [stderr] 61 | | } [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 56 | } else if let Err(e) = init_rx.wait().map_err(|_| ErrorKind::LoopCommsError)? { [INFO] [stderr] 57 | Ok((State::Closed, Err(e))) [INFO] [stderr] 58 | } else { [INFO] [stderr] 59 | Ok((next_state(sender), Ok(rx.boxed()))) [INFO] [stderr] 60 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/tokio/mqtt_loop.rs:129:18 [INFO] [stderr] | [INFO] [stderr] 129 | _ => return Err(ErrorKind::ClientUnavailable.into()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(ErrorKind::ClientUnavailable.into())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/tokio/mqtt_loop.rs:380:50 [INFO] [stderr] | [INFO] [stderr] 380 | Some(ClientRequest { ty: _, ret, ack }) => { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: Try with `ClientRequest { ret, ack, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/tokio/response.rs:88:13 [INFO] [stderr] | [INFO] [stderr] 88 | / return Err(SourceError::ProcessResponse( [INFO] [stderr] 89 | | ErrorKind::from(ProtoErrorKind::ConnectionRefused(*crc)) [INFO] [stderr] 90 | | .into(), [INFO] [stderr] 91 | | )); [INFO] [stderr] | |_______________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 88 | Err(SourceError::ProcessResponse( [INFO] [stderr] 89 | ErrorKind::from(ProtoErrorKind::ConnectionRefused(*crc)) [INFO] [stderr] 90 | .into(), [INFO] [stderr] 91 | )) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:1:16 [INFO] [stderr] | [INFO] [stderr] 1 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncSink`, `Sink` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:2:28 [INFO] [stderr] | [INFO] [stderr] 2 | use futures::{Poll, Async, AsyncSink, Sink, Future}; [INFO] [stderr] | ^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `PacketId`, `PacketType`, `QualityOfService` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:9:25 [INFO] [stderr] | [INFO] [stderr] 9 | use proto::{MqttPacket, PacketType, QualityOfService, PacketId}; [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ErrorKind`, `ResultExt` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:10:29 [INFO] [stderr] | [INFO] [stderr] 10 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `PublishState` [INFO] [stderr] --> src/tokio/outbound_handlers/ping_request.rs:12:25 [INFO] [stderr] | [INFO] [stderr] 12 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple}; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/outbound_handlers/publish.rs:1:16 [INFO] [stderr] | [INFO] [stderr] 1 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncSink`, `Sink` [INFO] [stderr] --> src/tokio/outbound_handlers/publish.rs:2:28 [INFO] [stderr] | [INFO] [stderr] 2 | use futures::{Poll, Async, AsyncSink, Sink, Future}; [INFO] [stderr] | ^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/outbound_handlers/publish.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `PacketType` [INFO] [stderr] --> src/tokio/outbound_handlers/publish.rs:9:25 [INFO] [stderr] | [INFO] [stderr] 9 | use proto::{MqttPacket, PacketType, QualityOfService, PacketId}; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `OneTimeKey` [INFO] [stderr] --> src/tokio/outbound_handlers/publish.rs:12:13 [INFO] [stderr] | [INFO] [stderr] 12 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple}; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `BoxFuture` [INFO] [stderr] --> src/tokio/outbound_handlers/mod.rs:8:27 [INFO] [stderr] | [INFO] [stderr] 8 | use tokio::{RequestTuple, BoxFuture}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:3:16 [INFO] [stderr] | [INFO] [stderr] 3 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AsyncSink` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:4:28 [INFO] [stderr] | [INFO] [stderr] 4 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::unsync::mpsc::UnboundedSender` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::unsync::mpsc::UnboundedSender; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `PacketType`, `QualityOfService`, `TopicName` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:11:25 [INFO] [stderr] | [INFO] [stderr] 11 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] 12 | PacketId, TopicName}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ResultExt`, `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:14:21 [INFO] [stderr] | [INFO] [stderr] 14 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `PublishState`, `RequestTuple` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:17:25 [INFO] [stderr] | [INFO] [stderr] 17 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture}; [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:4:16 [INFO] [stderr] | [INFO] [stderr] 4 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AsyncSink` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:5:28 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::sync::mpsc::unbounded` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::sync::mpsc::unbounded; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::unsync::mpsc::UnboundedSender` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use futures::unsync::mpsc::UnboundedSender; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `PacketType`, `QualityOfService`, `TopicName` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:12:25 [INFO] [stderr] | [INFO] [stderr] 12 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] 13 | PacketId, TopicName}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ResultExt`, `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:15:21 [INFO] [stderr] | [INFO] [stderr] 15 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `PublishState`, `RequestTuple`, `SubItem`, `TopicFilter` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:18:25 [INFO] [stderr] | [INFO] [stderr] 18 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture}; [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:4:16 [INFO] [stderr] | [INFO] [stderr] 4 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncSink`, `Poll` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:5:15 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::sync::mpsc::unbounded` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use futures::sync::mpsc::unbounded; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::unsync::mpsc::UnboundedSender` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use futures::unsync::mpsc::UnboundedSender; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `MqttPacket`, `PacketId`, `PacketType`, `Payload`, `QualityOfService`, `TopicName` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] 14 | PacketId, TopicName}; [INFO] [stderr] | ^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ErrorKind`, `ResultExt`, `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:16:21 [INFO] [stderr] | [INFO] [stderr] 16 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `errors::proto::ErrorKind as ProtoErrorKind` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | use errors::proto::ErrorKind as ProtoErrorKind; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `PublishState`, `RequestTuple`, `SubItem`, `TopicFilter` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:19:25 [INFO] [stderr] | [INFO] [stderr] 19 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture}; [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::collections::hash_map::Entry` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use std::collections::hash_map::Entry; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:5:16 [INFO] [stderr] | [INFO] [stderr] 5 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncSink`, `Sink` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:6:28 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::sync::mpsc::unbounded` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use futures::sync::mpsc::unbounded; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `PacketType` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:13:25 [INFO] [stderr] | [INFO] [stderr] 13 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ErrorKind`, `ResultExt`, `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:16:21 [INFO] [stderr] | [INFO] [stderr] 16 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `ClientReturn`, `OneTimeKey`, `RequestTuple`, `SubItem`, `TopicFilter` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::collections::hash_map::Entry` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use std::collections::hash_map::Entry; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bytes::Bytes` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use bytes::Bytes; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:5:16 [INFO] [stderr] | [INFO] [stderr] 5 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncSink`, `Poll` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:6:15 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::sync::mpsc::unbounded` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use futures::sync::mpsc::unbounded; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::unsync::mpsc::UnboundedSender` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use futures::unsync::mpsc::UnboundedSender; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `PacketType`, `Payload`, `QualityOfService`, `TopicName` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:14:25 [INFO] [stderr] | [INFO] [stderr] 14 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] 15 | PacketId, TopicName}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:17:21 [INFO] [stderr] | [INFO] [stderr] 17 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `OneTimeKey`, `RequestTuple`, `SubItem`, `TopicFilter` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:20:13 [INFO] [stderr] | [INFO] [stderr] 20 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture}; [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::collections::hash_map::Entry` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use std::collections::hash_map::Entry; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bytes::Bytes` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use bytes::Bytes; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:5:16 [INFO] [stderr] | [INFO] [stderr] 5 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AsyncSink` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:6:28 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::sync::mpsc::unbounded` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use futures::sync::mpsc::unbounded; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `PacketType`, `Payload`, `QualityOfService`, `TopicName` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:13:25 [INFO] [stderr] | [INFO] [stderr] 13 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] 14 | PacketId, TopicName}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:16:21 [INFO] [stderr] | [INFO] [stderr] 16 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `ClientReturn`, `OneTimeKey`, `RequestTuple`, `SubItem`, `TopicFilter` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::collections::hash_map::Entry` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use std::collections::hash_map::Entry; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncRead`, `AsyncWrite` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:5:16 [INFO] [stderr] | [INFO] [stderr] 5 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncSink`, `Sink` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:6:28 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::sync::mpsc::unbounded` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use futures::sync::mpsc::unbounded; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `take::Take` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use take::Take; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bincode` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use bincode; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ConnectAckFlags`, `ConnectReturnCode`, `PacketType`, `QualityOfService` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:13:25 [INFO] [stderr] | [INFO] [stderr] 13 | use proto::{MqttPacket, PacketType, QualityOfService, Payload, ConnectReturnCode, ConnectAckFlags, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ErrorKind`, `ResultExt`, `Result` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:16:21 [INFO] [stderr] | [INFO] [stderr] 16 | use errors::{Error, Result, ErrorKind, ResultExt}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxFuture`, `ClientReturn`, `OneTimeKey`, `RequestTuple`, `SubItem`, `TopicFilter` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | use tokio::{OneTimeKey, PublishState, ClientReturn, RequestTuple, TopicFilter, SubItem, BoxFuture, [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::BoxFuture': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/types.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use futures::future::BoxFuture; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::stream::BoxStream': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/types.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::stream::BoxStream; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::BoxFuture': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/types.rs:7:29 [INFO] [stderr] | [INFO] [stderr] 7 | pub type BoxMqttFuture = BoxFuture; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::stream::BoxStream': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/types.rs:9:29 [INFO] [stderr] | [INFO] [stderr] 9 | pub type BoxMqttStream = BoxStream; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'tokio_io::codec::Framed': Moved to tokio-codec [INFO] [stderr] --> src/tokio/mod.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use tokio_io::codec::Framed; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'tokio_io::codec::Framed': Moved to tokio-codec [INFO] [stderr] --> src/tokio/mod.rs:27:40 [INFO] [stderr] | [INFO] [stderr] 27 | type MqttFramedReader = SplitStream>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'tokio_io::codec::Framed': Moved to tokio-codec [INFO] [stderr] --> src/tokio/mod.rs:28:38 [INFO] [stderr] | [INFO] [stderr] 28 | type MqttFramedWriter = SplitSink>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'bytes::BufMut::put_u16': use put_u16_be or put_u16_le [INFO] [stderr] --> src/proto/types.rs:271:13 [INFO] [stderr] | [INFO] [stderr] 271 | out.put_u16::(self.len() as u16); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'bytes::Buf::get_u16': use get_u16_be or get_u16_le [INFO] [stderr] --> src/proto/headers.rs:135:40 [INFO] [stderr] | [INFO] [stderr] 135 | Ok(PacketId(raw.into_buf().get_u16::())) [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'bytes::BufMut::put_u16': use put_u16_be or put_u16_le [INFO] [stderr] --> src/proto/headers.rs:140:13 [INFO] [stderr] | [INFO] [stderr] 140 | out.put_u16::(self.0); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'bytes::Buf::get_u16': use get_u16_be or get_u16_le [INFO] [stderr] --> src/proto/headers.rs:170:41 [INFO] [stderr] | [INFO] [stderr] 170 | Ok(KeepAlive(raw.into_buf().get_u16::())) [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'bytes::BufMut::put_u16': use put_u16_be or put_u16_le [INFO] [stderr] --> src/proto/headers.rs:175:13 [INFO] [stderr] | [INFO] [stderr] 175 | out.put_u16::(self.0); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Stream::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/client.rs:223:55 [INFO] [stderr] | [INFO] [stderr] 223 | Some(Ok((s, _))) => Ok(Some(s.boxed())), [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/client.rs:266:63 [INFO] [stderr] | [INFO] [stderr] 266 | client.request(connect).into_future().map(|_| ()).boxed() [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item '>::send': renamed to `unbounded_send` [INFO] [stderr] --> src/tokio/mqtt_loop.rs:54:32 [INFO] [stderr] | [INFO] [stderr] 54 | if let Err(e) = sender.send(req).chain_err(|| ErrorKind::LoopCommsError) { [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/tokio/mqtt_loop.rs:60:47 [INFO] [stderr] | [INFO] [stderr] 60 | Ok((next_state(sender), Ok(rx.boxed()))) [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'tokio_io::AsyncRead::framed': Use tokio_codec::Decoder::framed instead [INFO] [stderr] --> src/tokio/mqtt_loop.rs:266:34 [INFO] [stderr] | [INFO] [stderr] 266 | let (fwrite, fread) = io.framed(MqttCodec).split(); [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/tokio/mqtt_loop.rs:317:14 [INFO] [stderr] | [INFO] [stderr] 317 | .boxed() [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/tokio/mqtt_loop.rs:519:42 [INFO] [stderr] | [INFO] [stderr] 519 | .boxed(), [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Stream::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/tokio/response.rs:83:40 [INFO] [stderr] | [INFO] [stderr] 83 | vec![Ok((custom_rx.boxed(), QualityOfService::QoS0))], [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'bytes::BufMut::put_u16': use put_u16_be or put_u16_le [INFO] [stderr] --> src/proto/types.rs:271:13 [INFO] [stderr] | [INFO] [stderr] 271 | out.put_u16::(self.len() as u16); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Stream::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:101:52 [INFO] [stderr] | [INFO] [stderr] 101 | collect.push(Ok((custom_rx.boxed(), sub.qos))); [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'bytes::Buf::get_u16': use get_u16_be or get_u16_le [INFO] [stderr] --> src/proto/headers.rs:135:40 [INFO] [stderr] | [INFO] [stderr] 135 | Ok(PacketId(raw.into_buf().get_u16::())) [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'bytes::BufMut::put_u16': use put_u16_be or put_u16_le [INFO] [stderr] --> src/proto/headers.rs:140:13 [INFO] [stderr] | [INFO] [stderr] 140 | out.put_u16::(self.0); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'bytes::Buf::get_u16': use get_u16_be or get_u16_le [INFO] [stderr] --> src/proto/headers.rs:170:41 [INFO] [stderr] | [INFO] [stderr] 170 | Ok(KeepAlive(raw.into_buf().get_u16::())) [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'bytes::BufMut::put_u16': use put_u16_be or put_u16_le [INFO] [stderr] --> src/proto/headers.rs:175:13 [INFO] [stderr] | [INFO] [stderr] 175 | out.put_u16::(self.0); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Stream::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/client.rs:223:55 [INFO] [stderr] | [INFO] [stderr] 223 | Some(Ok((s, _))) => Ok(Some(s.boxed())), [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/client.rs:266:63 [INFO] [stderr] | [INFO] [stderr] 266 | client.request(connect).into_future().map(|_| ()).boxed() [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Sink` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:4:39 [INFO] [stderr] | [INFO] [stderr] 4 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Sink` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:5:39 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Stream` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:5:53 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Sink` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:5:39 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Stream` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:5:53 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Stream` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:6:53 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Sink` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:6:39 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Stream` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:6:53 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Stream` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:6:53 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Stream` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:6:53 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item '>::send': renamed to `unbounded_send` [INFO] [stderr] --> src/tokio/mqtt_loop.rs:54:32 [INFO] [stderr] | [INFO] [stderr] 54 | if let Err(e) = sender.send(req).chain_err(|| ErrorKind::LoopCommsError) { [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/tokio/mqtt_loop.rs:60:47 [INFO] [stderr] | [INFO] [stderr] 60 | Ok((next_state(sender), Ok(rx.boxed()))) [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'tokio_io::AsyncRead::framed': Use tokio_codec::Decoder::framed instead [INFO] [stderr] --> src/tokio/mqtt_loop.rs:266:34 [INFO] [stderr] | [INFO] [stderr] 266 | let (fwrite, fread) = io.framed(MqttCodec).split(); [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/tokio/mqtt_loop.rs:317:14 [INFO] [stderr] | [INFO] [stderr] 317 | .boxed() [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/tokio/mqtt_loop.rs:519:42 [INFO] [stderr] | [INFO] [stderr] 519 | .boxed(), [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Stream::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/tokio/response.rs:83:40 [INFO] [stderr] | [INFO] [stderr] 83 | vec![Ok((custom_rx.boxed(), QualityOfService::QoS0))], [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Stream::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:101:52 [INFO] [stderr] | [INFO] [stderr] 101 | collect.push(Ok((custom_rx.boxed(), sub.qos))); [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Sink` [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:4:39 [INFO] [stderr] | [INFO] [stderr] 4 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Sink` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:5:39 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Stream` [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:5:53 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Sink` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:5:39 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Stream` [INFO] [stderr] --> src/tokio/inbound_handlers/ping_response.rs:5:53 [INFO] [stderr] | [INFO] [stderr] 5 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Stream` [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:6:53 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Sink` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:6:39 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Stream` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:6:53 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Stream` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:6:53 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Stream` [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:6:53 [INFO] [stderr] | [INFO] [stderr] 6 | use futures::{Poll, Async, AsyncSink, Sink, Future, Stream}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/tokio/mqtt_loop.rs:320:31 [INFO] [stderr] | [INFO] [stderr] 320 | fn poll_queues(&mut self, mut res: SourceItem) -> Poll<(), ::tokio::SourceError> { [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:31:16 [INFO] [stderr] | [INFO] [stderr] 31 | pub fn qos(&self) -> QualityOfService { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:43:22 [INFO] [stderr] | [INFO] [stderr] 43 | pub fn is_retain(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:47:25 [INFO] [stderr] | [INFO] [stderr] 47 | pub fn is_duplicate(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:73:21 [INFO] [stderr] | [INFO] [stderr] 73 | pub fn is_clean(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:111:18 [INFO] [stderr] | [INFO] [stderr] 111 | pub fn is_ok(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:112:9 [INFO] [stderr] | [INFO] [stderr] 112 | / match self { [INFO] [stderr] 113 | | &ConnRetCode::Accepted => true, [INFO] [stderr] 114 | | _ => false, [INFO] [stderr] 115 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 112 | match *self { [INFO] [stderr] 113 | ConnRetCode::Accepted => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:118:19 [INFO] [stderr] | [INFO] [stderr] 118 | pub fn is_err(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:122:18 [INFO] [stderr] | [INFO] [stderr] 122 | pub fn as_u8(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:136:9 [INFO] [stderr] | [INFO] [stderr] 136 | / match self { [INFO] [stderr] 137 | | &ConnRetCode::Accepted => write!(f, "{}", CRC_0_MESSAGE), [INFO] [stderr] 138 | | &ConnRetCode::BadProtoVersion => write!(f, "{}", CRC_1_MESSAGE), [INFO] [stderr] 139 | | &ConnRetCode::ClientIdRejected => write!(f, "{}", CRC_2_MESSAGE), [INFO] [stderr] ... | [INFO] [stderr] 142 | | &ConnRetCode::Unauthorized => write!(f, "{}", CRC_5_MESSAGE), [INFO] [stderr] 143 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 136 | match *self { [INFO] [stderr] 137 | ConnRetCode::Accepted => write!(f, "{}", CRC_0_MESSAGE), [INFO] [stderr] 138 | ConnRetCode::BadProtoVersion => write!(f, "{}", CRC_1_MESSAGE), [INFO] [stderr] 139 | ConnRetCode::ClientIdRejected => write!(f, "{}", CRC_2_MESSAGE), [INFO] [stderr] 140 | ConnRetCode::ServerUnavailable => write!(f, "{}", CRC_3_MESSAGE), [INFO] [stderr] 141 | ConnRetCode::BadCredentials => write!(f, "{}", CRC_4_MESSAGE), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:156:18 [INFO] [stderr] | [INFO] [stderr] 156 | pub fn as_u8(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:180:9 [INFO] [stderr] | [INFO] [stderr] 180 | / match self { [INFO] [stderr] 181 | | &QualityOfService::QoS0 => write!(f, "QOS0"), [INFO] [stderr] 182 | | &QualityOfService::QoS1 => write!(f, "QOS1"), [INFO] [stderr] 183 | | &QualityOfService::QoS2 => write!(f, "QOS2"), [INFO] [stderr] 184 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 180 | match *self { [INFO] [stderr] 181 | QualityOfService::QoS0 => write!(f, "QOS0"), [INFO] [stderr] 182 | QualityOfService::QoS1 => write!(f, "QOS1"), [INFO] [stderr] 183 | QualityOfService::QoS2 => write!(f, "QOS2"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/tokio/mqtt_loop.rs:320:31 [INFO] [stderr] | [INFO] [stderr] 320 | fn poll_queues(&mut self, mut res: SourceItem) -> Poll<(), ::tokio::SourceError> { [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:199:18 [INFO] [stderr] | [INFO] [stderr] 199 | pub fn is_ok(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:200:9 [INFO] [stderr] | [INFO] [stderr] 200 | / match self { [INFO] [stderr] 201 | | &SubAckReturnCode::Failure => false, [INFO] [stderr] 202 | | _ => true, [INFO] [stderr] 203 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 200 | match *self { [INFO] [stderr] 201 | SubAckReturnCode::Failure => false, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `proto::types::MqttString` [INFO] [stderr] --> src/proto/types.rs:251:5 [INFO] [stderr] | [INFO] [stderr] 251 | / pub fn new() -> MqttString { [INFO] [stderr] 252 | | MqttString(String::new()) [INFO] [stderr] 253 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 248 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/proto/types.rs:255:5 [INFO] [stderr] | [INFO] [stderr] 255 | / pub fn from_str(s: &str) -> Result { [INFO] [stderr] 256 | | if s.len() > 0xFFFF { [INFO] [stderr] 257 | | bail!(ErrorKind::StringConversionError) [INFO] [stderr] 258 | | } else { [INFO] [stderr] 259 | | Ok(MqttString(String::from(s))) [INFO] [stderr] 260 | | } [INFO] [stderr] 261 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:322:9 [INFO] [stderr] | [INFO] [stderr] 322 | / match self { [INFO] [stderr] 323 | | &Payload::Connect(ref cid, ref will, ref creds) => { [INFO] [stderr] 324 | | cid.encode(out); [INFO] [stderr] 325 | | if let &Some((ref topic, ref msg)) = will { [INFO] [stderr] ... | [INFO] [stderr] 348 | | _ => {} [INFO] [stderr] 349 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 322 | match *self { [INFO] [stderr] 323 | Payload::Connect(ref cid, ref will, ref creds) => { [INFO] [stderr] 324 | cid.encode(out); [INFO] [stderr] 325 | if let &Some((ref topic, ref msg)) = will { [INFO] [stderr] 326 | topic.encode(out); [INFO] [stderr] 327 | out.reserve(msg.len()); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:325:17 [INFO] [stderr] | [INFO] [stderr] 325 | / if let &Some((ref topic, ref msg)) = will { [INFO] [stderr] 326 | | topic.encode(out); [INFO] [stderr] 327 | | out.reserve(msg.len()); [INFO] [stderr] 328 | | out.put(msg); [INFO] [stderr] 329 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 325 | if let Some((ref topic, ref msg)) = *will { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:330:17 [INFO] [stderr] | [INFO] [stderr] 330 | / if let &Some((ref user, ref p)) = creds { [INFO] [stderr] 331 | | user.encode(out); [INFO] [stderr] 332 | | [INFO] [stderr] 333 | | if let &Some(ref pass) = p { [INFO] [stderr] 334 | | pass.encode(out); [INFO] [stderr] 335 | | } [INFO] [stderr] 336 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 330 | if let Some((ref user, ref p)) = *creds { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:333:21 [INFO] [stderr] | [INFO] [stderr] 333 | / if let &Some(ref pass) = p { [INFO] [stderr] 334 | | pass.encode(out); [INFO] [stderr] 335 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 333 | if let Some(ref pass) = *p { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/proto/headers.rs:34:14 [INFO] [stderr] | [INFO] [stderr] 34 | .ok_or(ErrorKind::PacketDecodingError.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::PacketDecodingError.into())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/proto/headers.rs:33:18 [INFO] [stderr] | [INFO] [stderr] 33 | .map(|f| ConnectFlags(f)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ConnectFlags` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/proto/headers.rs:67:14 [INFO] [stderr] | [INFO] [stderr] 67 | .ok_or(ErrorKind::PacketDecodingError.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::PacketDecodingError.into())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/proto/headers.rs:66:18 [INFO] [stderr] | [INFO] [stderr] 66 | .map(|f| ConnectAckFlags(f)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ConnectAckFlags` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/proto/headers.rs:100:14 [INFO] [stderr] | [INFO] [stderr] 100 | .ok_or(ErrorKind::PacketDecodingError.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::PacketDecodingError.into())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/proto/headers.rs:99:18 [INFO] [stderr] | [INFO] [stderr] 99 | .map(|c| ConnectReturnCode(c)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ConnectReturnCode` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/proto/headers.rs:204:14 [INFO] [stderr] | [INFO] [stderr] 204 | .ok_or(ErrorKind::PacketDecodingError.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::PacketDecodingError.into())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/proto/headers.rs:203:18 [INFO] [stderr] | [INFO] [stderr] 203 | .map(|c| ProtocolLevel(c)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ProtocolLevel` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/proto/headers.rs:238:18 [INFO] [stderr] | [INFO] [stderr] 238 | .map(|s| ProtocolName(s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ProtocolName` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/proto/headers.rs:270:50 [INFO] [stderr] | [INFO] [stderr] 270 | Ok(t) => MqttString::from_str(t).map(|s| TopicName(s)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove closure as shown: `TopicName` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/proto/mod.rs:32:12 [INFO] [stderr] | [INFO] [stderr] 32 | if val <= 0 { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::absurd_extreme_comparisons)] on by default [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using val == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `proto::Headers` [INFO] [stderr] --> src/proto/mod.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | / pub fn new() -> Headers { [INFO] [stderr] 46 | | Headers { data: LinkedHashMap::new() } [INFO] [stderr] 47 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 40 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/proto/mod.rs:61:19 [INFO] [stderr] | [INFO] [stderr] 61 | let key = H::header_name().into(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `H::header_name()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/proto/mod.rs:63:18 [INFO] [stderr] | [INFO] [stderr] 63 | .ok_or(MqttErrorKind::PacketDecodingError.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| MqttErrorKind::PacketDecodingError.into())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/mod.rs:165:13 [INFO] [stderr] | [INFO] [stderr] 165 | / if let &Some(_) = pass { [INFO] [stderr] 166 | | flags.insert(PASSWORD); [INFO] [stderr] 167 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 165 | if let Some(_) = *pass { [INFO] [stderr] | ^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/proto/mod.rs:174:43 [INFO] [stderr] | [INFO] [stderr] 174 | let payload = Payload::Connect(id.unwrap_or(MqttString::new()), last_will, creds); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(MqttString::new)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u64 may become silently lossy if types change [INFO] [stderr] --> src/client.rs:178:17 [INFO] [stderr] | [INFO] [stderr] 178 | cfg.keep_alive as u64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(cfg.keep_alive)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/client.rs:185:45 [INFO] [stderr] | [INFO] [stderr] 185 | Some(LWTMessage::new(topic, q.clone(), *r, m.clone())) [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*q` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/client.rs:195:27 [INFO] [stderr] | [INFO] [stderr] 195 | let pwd = if let &Some(ref pass) = p { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 196 | | Some(MqttString::from_str(pass)?) [INFO] [stderr] 197 | | } else { [INFO] [stderr] 198 | | None [INFO] [stderr] 199 | | }; [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 195 | let pwd = if let Some(ref pass) = *p { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/client.rs:253:9 [INFO] [stderr] | [INFO] [stderr] 253 | / if let &mut ClientState::Connected(ref mut client) = &mut self.state { [INFO] [stderr] 254 | | let topic = MqttString::from_str_lossy(topic.as_str()); [INFO] [stderr] 255 | | let flags: PacketFlags = match qos { [INFO] [stderr] 256 | | QualityOfService::QoS2 => QOS2, [INFO] [stderr] ... | [INFO] [stderr] 268 | | Box::new(result::<_, _>(Err(ErrorKind::NotConnected.into()))) [INFO] [stderr] 269 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 253 | if let ClientState::Connected(ref mut client) = *(&mut self.state) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/persistence/fs.rs:18:32 [INFO] [stderr] | [INFO] [stderr] 18 | dir::create(p.to_str().ok_or(io::Error::new( [INFO] [stderr] | ________________________________^ [INFO] [stderr] 19 | | io::ErrorKind::Other, [INFO] [stderr] 20 | | "Error ceating directory", [INFO] [stderr] 21 | | ))?).map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 18 | dir::create(p.to_str().ok_or_else(|| io::Error::new( [INFO] [stderr] 19 | io::ErrorKind::Other, [INFO] [stderr] 20 | "Error ceating directory", [INFO] [stderr] 21 | ))?).map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/persistence/fs.rs:74:44 [INFO] [stderr] | [INFO] [stderr] 74 | let path_s = path.to_str().ok_or( [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 75 | | io::Error::from(io::ErrorKind::InvalidInput), [INFO] [stderr] 76 | | )?; [INFO] [stderr] | |_________________^ help: try this: `ok_or_else(|| io::Error::from(io::ErrorKind::InvalidInput))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: statement can be reduced [INFO] [stderr] --> src/persistence/fs.rs:101:13 [INFO] [stderr] | [INFO] [stderr] 101 | &collect.sort(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `collect.sort();` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_operation)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `persistence::memory::MemoryPersistence` [INFO] [stderr] --> src/persistence/memory.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | / pub fn new() -> MemoryPersistence { [INFO] [stderr] 29 | | MemoryPersistence { [INFO] [stderr] 30 | | store: LinkedHashMap::new(), [INFO] [stderr] 31 | | count: 0, [INFO] [stderr] 32 | | } [INFO] [stderr] 33 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 22 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/persistence/memory.rs:60:12 [INFO] [stderr] | [INFO] [stderr] 60 | Ok(self.store.keys().map(|v| *v).collect()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.store.keys().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/tokio/mqtt_loop.rs:46:10 [INFO] [stderr] | [INFO] [stderr] 46 | ) -> Result<(State, Result, Canceled>>)> [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/tokio/mqtt_loop.rs:80:21 [INFO] [stderr] | [INFO] [stderr] 80 | |q| State::Running(q), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `State::Running` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/tokio/mqtt_loop.rs:106:21 [INFO] [stderr] | [INFO] [stderr] 106 | |q| State::Running(q), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `State::Running` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tokio/mqtt_loop.rs:419:17 [INFO] [stderr] | [INFO] [stderr] 419 | / match current_state { [INFO] [stderr] 420 | | &mut LoopStatus::Connected | [INFO] [stderr] 421 | | &mut LoopStatus::Disconnecting(_, _) => { [INFO] [stderr] 422 | | if let Some(ref p) = packet { [INFO] [stderr] ... | [INFO] [stderr] 431 | | _ => unreachable!(), [INFO] [stderr] 432 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 419 | match *current_state { [INFO] [stderr] 420 | LoopStatus::Connected | [INFO] [stderr] 421 | LoopStatus::Disconnecting(_, _) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tokio/mqtt_loop.rs:436:17 [INFO] [stderr] | [INFO] [stderr] 436 | / match current_state { [INFO] [stderr] 437 | | &mut LoopStatus::Connected => { [INFO] [stderr] 438 | | self.inflight = *work; [INFO] [stderr] 439 | | if *sent { [INFO] [stderr] ... | [INFO] [stderr] 493 | | _ => unreachable!(), [INFO] [stderr] 494 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 436 | match *current_state { [INFO] [stderr] 437 | LoopStatus::Connected => { [INFO] [stderr] 438 | self.inflight = *work; [INFO] [stderr] 439 | if *sent { [INFO] [stderr] 440 | self.timer_flag = None; [INFO] [stderr] 441 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tokio/mqtt_loop.rs:497:17 [INFO] [stderr] | [INFO] [stderr] 497 | / match t { [INFO] [stderr] 498 | | &TimeoutType::Connect => { [INFO] [stderr] 499 | | let mut current_state = &mut self.status; [INFO] [stderr] 500 | | match *current_state { [INFO] [stderr] ... | [INFO] [stderr] 527 | | } [INFO] [stderr] 528 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 497 | match *t { [INFO] [stderr] 498 | TimeoutType::Connect => { [INFO] [stderr] 499 | let mut current_state = &mut self.status; [INFO] [stderr] 500 | match *current_state { [INFO] [stderr] 501 | LoopStatus::Connecting(_) => { [INFO] [stderr] 502 | *current_state = [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/tokio/mqtt_loop.rs:500:25 [INFO] [stderr] | [INFO] [stderr] 500 | / match *current_state { [INFO] [stderr] 501 | | LoopStatus::Connecting(_) => { [INFO] [stderr] 502 | | *current_state = [INFO] [stderr] 503 | | LoopStatus::PendingError( [INFO] [stderr] ... | [INFO] [stderr] 507 | | _ => {} [INFO] [stderr] 508 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 500 | if let LoopStatus::Connecting(_) = *current_state { [INFO] [stderr] 501 | *current_state = [INFO] [stderr] 502 | LoopStatus::PendingError( [INFO] [stderr] 503 | ProtoErrorKind::ResponseTimeout(PacketType::Connect).into(), [INFO] [stderr] 504 | ); [INFO] [stderr] 505 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/tokio/mqtt_loop.rs:571:17 [INFO] [stderr] | [INFO] [stderr] 571 | self.poll_queues(sourceitem); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/response.rs:65:60 [INFO] [stderr] | [INFO] [stderr] 65 | ProtoErrorKind::UnexpectedResponse(packet.ty.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/tokio/request.rs:112:21 [INFO] [stderr] | [INFO] [stderr] 112 | let _ = try_ready!(self.writer.poll_complete()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:76:68 [INFO] [stderr] | [INFO] [stderr] 76 | ProtoErrorKind::UnexpectedResponse(packet.ty.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:76:68 [INFO] [stderr] | [INFO] [stderr] 76 | ProtoErrorKind::UnexpectedResponse(packet.ty.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:104:25 [INFO] [stderr] | [INFO] [stderr] 104 | / requester.unbounded_send(LoopRequest::Internal( [INFO] [stderr] 105 | | MqttPacket::pub_ack_packet(*id), [INFO] [stderr] 106 | | )); [INFO] [stderr] | |___________________________^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:128:29 [INFO] [stderr] | [INFO] [stderr] 128 | / requester.unbounded_send( [INFO] [stderr] 129 | | LoopRequest::Internal(MqttPacket::pub_rec_packet(*id)), [INFO] [stderr] 130 | | ); [INFO] [stderr] | |______________________________^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:57:63 [INFO] [stderr] | [INFO] [stderr] 57 | return Err(ProtoErrorKind::UnexpectedResponse(packet.ty.clone()).into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: unused `futures::sink::Send` that must be used [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:100:21 [INFO] [stderr] | [INFO] [stderr] 100 | requester.send(LoopRequest::Internal(rel)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: futures do nothing unless polled [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:102:67 [INFO] [stderr] | [INFO] [stderr] 102 | return Err(ProtoErrorKind::UnexpectedResponse(packet.ty.clone()).into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:96:67 [INFO] [stderr] | [INFO] [stderr] 96 | return Err(ProtoErrorKind::UnexpectedResponse(packet.ty.clone()).into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:31:16 [INFO] [stderr] | [INFO] [stderr] 31 | pub fn qos(&self) -> QualityOfService { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/inbound_handlers/publish_complete.rs:47:63 [INFO] [stderr] | [INFO] [stderr] 47 | return Err(ProtoErrorKind::UnexpectedResponse(packet.ty.clone()).into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:43:22 [INFO] [stderr] | [INFO] [stderr] 43 | pub fn is_retain(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:47:25 [INFO] [stderr] | [INFO] [stderr] 47 | pub fn is_duplicate(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/tokio/mod.rs:75:5 [INFO] [stderr] | [INFO] [stderr] 75 | GotRequest(ClientQueue, Option), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/tokio/mod.rs:75:5 [INFO] [stderr] | [INFO] [stderr] 75 | GotRequest(ClientQueue, Option), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/tokio/mod.rs:84:5 [INFO] [stderr] | [INFO] [stderr] 84 | GotRequest(ClientQueue, Error), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/tokio/mod.rs:84:5 [INFO] [stderr] | [INFO] [stderr] 84 | GotRequest(ClientQueue, Error), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/tokio/mod.rs:160:28 [INFO] [stderr] | [INFO] [stderr] 160 | for tok in s.split("/") { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/tokio/mod.rs:161:29 [INFO] [stderr] | [INFO] [stderr] 161 | if tok.contains("+") { [INFO] [stderr] | ^^^ help: try using a char instead: `'+'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/tokio/mod.rs:163:36 [INFO] [stderr] | [INFO] [stderr] 163 | } else if tok.contains("#") { [INFO] [stderr] | ^^^ help: try using a char instead: `'#'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:73:21 [INFO] [stderr] | [INFO] [stderr] 73 | pub fn is_clean(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] error: Could not compile `tokio-mqttc`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:111:18 [INFO] [stderr] | [INFO] [stderr] 111 | pub fn is_ok(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:112:9 [INFO] [stderr] | [INFO] [stderr] 112 | / match self { [INFO] [stderr] 113 | | &ConnRetCode::Accepted => true, [INFO] [stderr] 114 | | _ => false, [INFO] [stderr] 115 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 112 | match *self { [INFO] [stderr] 113 | ConnRetCode::Accepted => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:118:19 [INFO] [stderr] | [INFO] [stderr] 118 | pub fn is_err(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:122:18 [INFO] [stderr] | [INFO] [stderr] 122 | pub fn as_u8(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:136:9 [INFO] [stderr] | [INFO] [stderr] 136 | / match self { [INFO] [stderr] 137 | | &ConnRetCode::Accepted => write!(f, "{}", CRC_0_MESSAGE), [INFO] [stderr] 138 | | &ConnRetCode::BadProtoVersion => write!(f, "{}", CRC_1_MESSAGE), [INFO] [stderr] 139 | | &ConnRetCode::ClientIdRejected => write!(f, "{}", CRC_2_MESSAGE), [INFO] [stderr] ... | [INFO] [stderr] 142 | | &ConnRetCode::Unauthorized => write!(f, "{}", CRC_5_MESSAGE), [INFO] [stderr] 143 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 136 | match *self { [INFO] [stderr] 137 | ConnRetCode::Accepted => write!(f, "{}", CRC_0_MESSAGE), [INFO] [stderr] 138 | ConnRetCode::BadProtoVersion => write!(f, "{}", CRC_1_MESSAGE), [INFO] [stderr] 139 | ConnRetCode::ClientIdRejected => write!(f, "{}", CRC_2_MESSAGE), [INFO] [stderr] 140 | ConnRetCode::ServerUnavailable => write!(f, "{}", CRC_3_MESSAGE), [INFO] [stderr] 141 | ConnRetCode::BadCredentials => write!(f, "{}", CRC_4_MESSAGE), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:156:18 [INFO] [stderr] | [INFO] [stderr] 156 | pub fn as_u8(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:180:9 [INFO] [stderr] | [INFO] [stderr] 180 | / match self { [INFO] [stderr] 181 | | &QualityOfService::QoS0 => write!(f, "QOS0"), [INFO] [stderr] 182 | | &QualityOfService::QoS1 => write!(f, "QOS1"), [INFO] [stderr] 183 | | &QualityOfService::QoS2 => write!(f, "QOS2"), [INFO] [stderr] 184 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 180 | match *self { [INFO] [stderr] 181 | QualityOfService::QoS0 => write!(f, "QOS0"), [INFO] [stderr] 182 | QualityOfService::QoS1 => write!(f, "QOS1"), [INFO] [stderr] 183 | QualityOfService::QoS2 => write!(f, "QOS2"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/proto/types.rs:199:18 [INFO] [stderr] | [INFO] [stderr] 199 | pub fn is_ok(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:200:9 [INFO] [stderr] | [INFO] [stderr] 200 | / match self { [INFO] [stderr] 201 | | &SubAckReturnCode::Failure => false, [INFO] [stderr] 202 | | _ => true, [INFO] [stderr] 203 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 200 | match *self { [INFO] [stderr] 201 | SubAckReturnCode::Failure => false, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `proto::types::MqttString` [INFO] [stderr] --> src/proto/types.rs:251:5 [INFO] [stderr] | [INFO] [stderr] 251 | / pub fn new() -> MqttString { [INFO] [stderr] 252 | | MqttString(String::new()) [INFO] [stderr] 253 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 248 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/proto/types.rs:255:5 [INFO] [stderr] | [INFO] [stderr] 255 | / pub fn from_str(s: &str) -> Result { [INFO] [stderr] 256 | | if s.len() > 0xFFFF { [INFO] [stderr] 257 | | bail!(ErrorKind::StringConversionError) [INFO] [stderr] 258 | | } else { [INFO] [stderr] 259 | | Ok(MqttString(String::from(s))) [INFO] [stderr] 260 | | } [INFO] [stderr] 261 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:322:9 [INFO] [stderr] | [INFO] [stderr] 322 | / match self { [INFO] [stderr] 323 | | &Payload::Connect(ref cid, ref will, ref creds) => { [INFO] [stderr] 324 | | cid.encode(out); [INFO] [stderr] 325 | | if let &Some((ref topic, ref msg)) = will { [INFO] [stderr] ... | [INFO] [stderr] 348 | | _ => {} [INFO] [stderr] 349 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 322 | match *self { [INFO] [stderr] 323 | Payload::Connect(ref cid, ref will, ref creds) => { [INFO] [stderr] 324 | cid.encode(out); [INFO] [stderr] 325 | if let &Some((ref topic, ref msg)) = will { [INFO] [stderr] 326 | topic.encode(out); [INFO] [stderr] 327 | out.reserve(msg.len()); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:325:17 [INFO] [stderr] | [INFO] [stderr] 325 | / if let &Some((ref topic, ref msg)) = will { [INFO] [stderr] 326 | | topic.encode(out); [INFO] [stderr] 327 | | out.reserve(msg.len()); [INFO] [stderr] 328 | | out.put(msg); [INFO] [stderr] 329 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 325 | if let Some((ref topic, ref msg)) = *will { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:330:17 [INFO] [stderr] | [INFO] [stderr] 330 | / if let &Some((ref user, ref p)) = creds { [INFO] [stderr] 331 | | user.encode(out); [INFO] [stderr] 332 | | [INFO] [stderr] 333 | | if let &Some(ref pass) = p { [INFO] [stderr] 334 | | pass.encode(out); [INFO] [stderr] 335 | | } [INFO] [stderr] 336 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 330 | if let Some((ref user, ref p)) = *creds { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/types.rs:333:21 [INFO] [stderr] | [INFO] [stderr] 333 | / if let &Some(ref pass) = p { [INFO] [stderr] 334 | | pass.encode(out); [INFO] [stderr] 335 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 333 | if let Some(ref pass) = *p { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/proto/headers.rs:34:14 [INFO] [stderr] | [INFO] [stderr] 34 | .ok_or(ErrorKind::PacketDecodingError.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::PacketDecodingError.into())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/proto/headers.rs:33:18 [INFO] [stderr] | [INFO] [stderr] 33 | .map(|f| ConnectFlags(f)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ConnectFlags` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/proto/headers.rs:67:14 [INFO] [stderr] | [INFO] [stderr] 67 | .ok_or(ErrorKind::PacketDecodingError.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::PacketDecodingError.into())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/proto/headers.rs:66:18 [INFO] [stderr] | [INFO] [stderr] 66 | .map(|f| ConnectAckFlags(f)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ConnectAckFlags` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/proto/headers.rs:100:14 [INFO] [stderr] | [INFO] [stderr] 100 | .ok_or(ErrorKind::PacketDecodingError.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::PacketDecodingError.into())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/proto/headers.rs:99:18 [INFO] [stderr] | [INFO] [stderr] 99 | .map(|c| ConnectReturnCode(c)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ConnectReturnCode` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/proto/headers.rs:204:14 [INFO] [stderr] | [INFO] [stderr] 204 | .ok_or(ErrorKind::PacketDecodingError.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::PacketDecodingError.into())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/proto/headers.rs:203:18 [INFO] [stderr] | [INFO] [stderr] 203 | .map(|c| ProtocolLevel(c)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ProtocolLevel` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/proto/headers.rs:238:18 [INFO] [stderr] | [INFO] [stderr] 238 | .map(|s| ProtocolName(s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ProtocolName` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/proto/headers.rs:270:50 [INFO] [stderr] | [INFO] [stderr] 270 | Ok(t) => MqttString::from_str(t).map(|s| TopicName(s)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove closure as shown: `TopicName` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/proto/mod.rs:32:12 [INFO] [stderr] | [INFO] [stderr] 32 | if val <= 0 { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::absurd_extreme_comparisons)] on by default [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using val == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `proto::Headers` [INFO] [stderr] --> src/proto/mod.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | / pub fn new() -> Headers { [INFO] [stderr] 46 | | Headers { data: LinkedHashMap::new() } [INFO] [stderr] 47 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 40 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/proto/mod.rs:61:19 [INFO] [stderr] | [INFO] [stderr] 61 | let key = H::header_name().into(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `H::header_name()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/proto/mod.rs:63:18 [INFO] [stderr] | [INFO] [stderr] 63 | .ok_or(MqttErrorKind::PacketDecodingError.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| MqttErrorKind::PacketDecodingError.into())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/proto/mod.rs:165:13 [INFO] [stderr] | [INFO] [stderr] 165 | / if let &Some(_) = pass { [INFO] [stderr] 166 | | flags.insert(PASSWORD); [INFO] [stderr] 167 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 165 | if let Some(_) = *pass { [INFO] [stderr] | ^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/proto/mod.rs:174:43 [INFO] [stderr] | [INFO] [stderr] 174 | let payload = Payload::Connect(id.unwrap_or(MqttString::new()), last_will, creds); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(MqttString::new)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u64 may become silently lossy if types change [INFO] [stderr] --> src/client.rs:178:17 [INFO] [stderr] | [INFO] [stderr] 178 | cfg.keep_alive as u64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(cfg.keep_alive)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/client.rs:185:45 [INFO] [stderr] | [INFO] [stderr] 185 | Some(LWTMessage::new(topic, q.clone(), *r, m.clone())) [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*q` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/client.rs:195:27 [INFO] [stderr] | [INFO] [stderr] 195 | let pwd = if let &Some(ref pass) = p { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 196 | | Some(MqttString::from_str(pass)?) [INFO] [stderr] 197 | | } else { [INFO] [stderr] 198 | | None [INFO] [stderr] 199 | | }; [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 195 | let pwd = if let Some(ref pass) = *p { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/client.rs:253:9 [INFO] [stderr] | [INFO] [stderr] 253 | / if let &mut ClientState::Connected(ref mut client) = &mut self.state { [INFO] [stderr] 254 | | let topic = MqttString::from_str_lossy(topic.as_str()); [INFO] [stderr] 255 | | let flags: PacketFlags = match qos { [INFO] [stderr] 256 | | QualityOfService::QoS2 => QOS2, [INFO] [stderr] ... | [INFO] [stderr] 268 | | Box::new(result::<_, _>(Err(ErrorKind::NotConnected.into()))) [INFO] [stderr] 269 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 253 | if let ClientState::Connected(ref mut client) = *(&mut self.state) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/persistence/fs.rs:18:32 [INFO] [stderr] | [INFO] [stderr] 18 | dir::create(p.to_str().ok_or(io::Error::new( [INFO] [stderr] | ________________________________^ [INFO] [stderr] 19 | | io::ErrorKind::Other, [INFO] [stderr] 20 | | "Error ceating directory", [INFO] [stderr] 21 | | ))?).map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 18 | dir::create(p.to_str().ok_or_else(|| io::Error::new( [INFO] [stderr] 19 | io::ErrorKind::Other, [INFO] [stderr] 20 | "Error ceating directory", [INFO] [stderr] 21 | ))?).map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/persistence/fs.rs:74:44 [INFO] [stderr] | [INFO] [stderr] 74 | let path_s = path.to_str().ok_or( [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 75 | | io::Error::from(io::ErrorKind::InvalidInput), [INFO] [stderr] 76 | | )?; [INFO] [stderr] | |_________________^ help: try this: `ok_or_else(|| io::Error::from(io::ErrorKind::InvalidInput))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: statement can be reduced [INFO] [stderr] --> src/persistence/fs.rs:101:13 [INFO] [stderr] | [INFO] [stderr] 101 | &collect.sort(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `collect.sort();` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_operation)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `persistence::memory::MemoryPersistence` [INFO] [stderr] --> src/persistence/memory.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | / pub fn new() -> MemoryPersistence { [INFO] [stderr] 29 | | MemoryPersistence { [INFO] [stderr] 30 | | store: LinkedHashMap::new(), [INFO] [stderr] 31 | | count: 0, [INFO] [stderr] 32 | | } [INFO] [stderr] 33 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 22 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/persistence/memory.rs:60:12 [INFO] [stderr] | [INFO] [stderr] 60 | Ok(self.store.keys().map(|v| *v).collect()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.store.keys().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/tokio/mqtt_loop.rs:46:10 [INFO] [stderr] | [INFO] [stderr] 46 | ) -> Result<(State, Result, Canceled>>)> [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/tokio/mqtt_loop.rs:80:21 [INFO] [stderr] | [INFO] [stderr] 80 | |q| State::Running(q), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `State::Running` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/tokio/mqtt_loop.rs:106:21 [INFO] [stderr] | [INFO] [stderr] 106 | |q| State::Running(q), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `State::Running` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tokio/mqtt_loop.rs:419:17 [INFO] [stderr] | [INFO] [stderr] 419 | / match current_state { [INFO] [stderr] 420 | | &mut LoopStatus::Connected | [INFO] [stderr] 421 | | &mut LoopStatus::Disconnecting(_, _) => { [INFO] [stderr] 422 | | if let Some(ref p) = packet { [INFO] [stderr] ... | [INFO] [stderr] 431 | | _ => unreachable!(), [INFO] [stderr] 432 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 419 | match *current_state { [INFO] [stderr] 420 | LoopStatus::Connected | [INFO] [stderr] 421 | LoopStatus::Disconnecting(_, _) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tokio/mqtt_loop.rs:436:17 [INFO] [stderr] | [INFO] [stderr] 436 | / match current_state { [INFO] [stderr] 437 | | &mut LoopStatus::Connected => { [INFO] [stderr] 438 | | self.inflight = *work; [INFO] [stderr] 439 | | if *sent { [INFO] [stderr] ... | [INFO] [stderr] 493 | | _ => unreachable!(), [INFO] [stderr] 494 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 436 | match *current_state { [INFO] [stderr] 437 | LoopStatus::Connected => { [INFO] [stderr] 438 | self.inflight = *work; [INFO] [stderr] 439 | if *sent { [INFO] [stderr] 440 | self.timer_flag = None; [INFO] [stderr] 441 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tokio/mqtt_loop.rs:497:17 [INFO] [stderr] | [INFO] [stderr] 497 | / match t { [INFO] [stderr] 498 | | &TimeoutType::Connect => { [INFO] [stderr] 499 | | let mut current_state = &mut self.status; [INFO] [stderr] 500 | | match *current_state { [INFO] [stderr] ... | [INFO] [stderr] 527 | | } [INFO] [stderr] 528 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 497 | match *t { [INFO] [stderr] 498 | TimeoutType::Connect => { [INFO] [stderr] 499 | let mut current_state = &mut self.status; [INFO] [stderr] 500 | match *current_state { [INFO] [stderr] 501 | LoopStatus::Connecting(_) => { [INFO] [stderr] 502 | *current_state = [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/tokio/mqtt_loop.rs:500:25 [INFO] [stderr] | [INFO] [stderr] 500 | / match *current_state { [INFO] [stderr] 501 | | LoopStatus::Connecting(_) => { [INFO] [stderr] 502 | | *current_state = [INFO] [stderr] 503 | | LoopStatus::PendingError( [INFO] [stderr] ... | [INFO] [stderr] 507 | | _ => {} [INFO] [stderr] 508 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 500 | if let LoopStatus::Connecting(_) = *current_state { [INFO] [stderr] 501 | *current_state = [INFO] [stderr] 502 | LoopStatus::PendingError( [INFO] [stderr] 503 | ProtoErrorKind::ResponseTimeout(PacketType::Connect).into(), [INFO] [stderr] 504 | ); [INFO] [stderr] 505 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/tokio/mqtt_loop.rs:571:17 [INFO] [stderr] | [INFO] [stderr] 571 | self.poll_queues(sourceitem); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/response.rs:65:60 [INFO] [stderr] | [INFO] [stderr] 65 | ProtoErrorKind::UnexpectedResponse(packet.ty.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/tokio/request.rs:112:21 [INFO] [stderr] | [INFO] [stderr] 112 | let _ = try_ready!(self.writer.poll_complete()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/inbound_handlers/subscribe_ack.rs:76:68 [INFO] [stderr] | [INFO] [stderr] 76 | ProtoErrorKind::UnexpectedResponse(packet.ty.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/inbound_handlers/unsubscribe_ack.rs:76:68 [INFO] [stderr] | [INFO] [stderr] 76 | ProtoErrorKind::UnexpectedResponse(packet.ty.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:104:25 [INFO] [stderr] | [INFO] [stderr] 104 | / requester.unbounded_send(LoopRequest::Internal( [INFO] [stderr] 105 | | MqttPacket::pub_ack_packet(*id), [INFO] [stderr] 106 | | )); [INFO] [stderr] | |___________________________^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/tokio/inbound_handlers/publish.rs:128:29 [INFO] [stderr] | [INFO] [stderr] 128 | / requester.unbounded_send( [INFO] [stderr] 129 | | LoopRequest::Internal(MqttPacket::pub_rec_packet(*id)), [INFO] [stderr] 130 | | ); [INFO] [stderr] | |______________________________^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/inbound_handlers/publish_ack.rs:57:63 [INFO] [stderr] | [INFO] [stderr] 57 | return Err(ProtoErrorKind::UnexpectedResponse(packet.ty.clone()).into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: unused `futures::sink::Send` that must be used [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:100:21 [INFO] [stderr] | [INFO] [stderr] 100 | requester.send(LoopRequest::Internal(rel)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: futures do nothing unless polled [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/inbound_handlers/publish_recieve.rs:102:67 [INFO] [stderr] | [INFO] [stderr] 102 | return Err(ProtoErrorKind::UnexpectedResponse(packet.ty.clone()).into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/inbound_handlers/publish_release.rs:96:67 [INFO] [stderr] | [INFO] [stderr] 96 | return Err(ProtoErrorKind::UnexpectedResponse(packet.ty.clone()).into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tokio/inbound_handlers/publish_complete.rs:47:63 [INFO] [stderr] | [INFO] [stderr] 47 | return Err(ProtoErrorKind::UnexpectedResponse(packet.ty.clone()).into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `packet.ty` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/tokio/mod.rs:75:5 [INFO] [stderr] | [INFO] [stderr] 75 | GotRequest(ClientQueue, Option), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/tokio/mod.rs:75:5 [INFO] [stderr] | [INFO] [stderr] 75 | GotRequest(ClientQueue, Option), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/tokio/mod.rs:84:5 [INFO] [stderr] | [INFO] [stderr] 84 | GotRequest(ClientQueue, Error), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/tokio/mod.rs:84:5 [INFO] [stderr] | [INFO] [stderr] 84 | GotRequest(ClientQueue, Error), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/tokio/mod.rs:160:28 [INFO] [stderr] | [INFO] [stderr] 160 | for tok in s.split("/") { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/tokio/mod.rs:161:29 [INFO] [stderr] | [INFO] [stderr] 161 | if tok.contains("+") { [INFO] [stderr] | ^^^ help: try using a char instead: `'+'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/tokio/mod.rs:163:36 [INFO] [stderr] | [INFO] [stderr] 163 | } else if tok.contains("#") { [INFO] [stderr] | ^^^ help: try using a char instead: `'#'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `tokio-mqttc`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "42ed32bccd3e6aee3d48abd9dadcba1ddcd6aa4c0bf3043f73639359522f5197"` [INFO] running `"docker" "rm" "-f" "42ed32bccd3e6aee3d48abd9dadcba1ddcd6aa4c0bf3043f73639359522f5197"` [INFO] [stdout] 42ed32bccd3e6aee3d48abd9dadcba1ddcd6aa4c0bf3043f73639359522f5197