[INFO] crate webrtc-sctp 0.0.0 is already in cache [INFO] extracting crate webrtc-sctp 0.0.0 into work/ex/clippy-test-run/sources/stable/reg/webrtc-sctp/0.0.0 [INFO] extracting crate webrtc-sctp 0.0.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/webrtc-sctp/0.0.0 [INFO] validating manifest of webrtc-sctp-0.0.0 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 webrtc-sctp-0.0.0 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 webrtc-sctp-0.0.0 [INFO] finished frobbing webrtc-sctp-0.0.0 [INFO] frobbed toml for webrtc-sctp-0.0.0 written to work/ex/clippy-test-run/sources/stable/reg/webrtc-sctp/0.0.0/Cargo.toml [INFO] started frobbing webrtc-sctp-0.0.0 [INFO] finished frobbing webrtc-sctp-0.0.0 [INFO] frobbed toml for webrtc-sctp-0.0.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/webrtc-sctp/0.0.0/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 webrtc-sctp-0.0.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/webrtc-sctp/0.0.0:/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] df17fa361dc86af09ffa594d0d97bccc1bab81af08cfa9ede342a3cfacf5ff7b [INFO] running `"docker" "start" "-a" "df17fa361dc86af09ffa594d0d97bccc1bab81af08cfa9ede342a3cfacf5ff7b"` [INFO] [stderr] Checking nom v4.1.1 [INFO] [stderr] Checking blake2 v0.7.1 [INFO] [stderr] Checking crossbeam v0.6.0 [INFO] [stderr] Checking tokio-reactor v0.1.8 [INFO] [stderr] Checking tokio-threadpool v0.1.11 [INFO] [stderr] Checking tokio-tcp v0.1.3 [INFO] [stderr] Checking tokio-uds v0.2.5 [INFO] [stderr] Checking tokio-udp v0.1.3 [INFO] [stderr] Checking tokio-fs v0.1.5 [INFO] [stderr] Checking tokio v0.1.15 [INFO] [stderr] Checking tokio-core v0.1.17 [INFO] [stderr] Checking webrtc-sctp v0.0.0 (/opt/crater/workdir) [INFO] [stderr] warning: using `writeln!(f, "")` [INFO] [stderr] --> src/packet/error_cause.rs:57:17 [INFO] [stderr] | [INFO] [stderr] 57 | writeln!(f, "") [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `writeln!(f)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::writeln_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `writeln!(f, "")` [INFO] [stderr] --> src/packet/error_cause.rs:69:17 [INFO] [stderr] | [INFO] [stderr] 69 | writeln!(f, "") [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `writeln!(f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `writeln!(f, "")` [INFO] [stderr] --> src/packet/error_cause.rs:77:17 [INFO] [stderr] | [INFO] [stderr] 77 | writeln!(f, "") [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `writeln!(f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `writeln!(f, "")` [INFO] [stderr] --> src/packet/error_cause.rs:88:17 [INFO] [stderr] | [INFO] [stderr] 88 | writeln!(f, "") [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `writeln!(f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/stack/association/mod.rs:91:13 [INFO] [stderr] | [INFO] [stderr] 91 | next_send_tsn: next_send_tsn, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `next_send_tsn` [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/stack/association/mod.rs:452:13 [INFO] [stderr] | [INFO] [stderr] 452 | initiate_tag: initiate_tag, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `initiate_tag` [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: using `writeln!(f, "")` [INFO] [stderr] --> src/stack/cookie.rs:128:9 [INFO] [stderr] | [INFO] [stderr] 128 | writeln!(f, "")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `writeln!(f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/stack/lowerlayer.rs:70:13 [INFO] [stderr] | [INFO] [stderr] 70 | socket: socket, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `socket` [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/stack/lowerlayer.rs:71:13 [INFO] [stderr] | [INFO] [stderr] 71 | address: address, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `address` [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/stack/lowerlayer.rs:96:17 [INFO] [stderr] | [INFO] [stderr] 96 | buffer: buffer, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `buffer` [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/stack/lowerlayer.rs:98:17 [INFO] [stderr] | [INFO] [stderr] 98 | address: address, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `address` [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/stack/sync.rs:137:13 [INFO] [stderr] | [INFO] [stderr] 137 | buffer: buffer, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `buffer` [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/stack/mod.rs:147:17 [INFO] [stderr] | [INFO] [stderr] 147 | timer: timer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `timer` [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/stack/mod.rs:148:17 [INFO] [stderr] | [INFO] [stderr] 148 | secret: secret, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `secret` [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/lib.rs:112:13 [INFO] [stderr] | [INFO] [stderr] 112 | buffer: buffer, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `buffer` [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: using `writeln!(f, "")` [INFO] [stderr] --> src/packet/error_cause.rs:57:17 [INFO] [stderr] | [INFO] [stderr] 57 | writeln!(f, "") [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `writeln!(f)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::writeln_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `writeln!(f, "")` [INFO] [stderr] --> src/packet/error_cause.rs:69:17 [INFO] [stderr] | [INFO] [stderr] 69 | writeln!(f, "") [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `writeln!(f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `writeln!(f, "")` [INFO] [stderr] --> src/packet/error_cause.rs:77:17 [INFO] [stderr] | [INFO] [stderr] 77 | writeln!(f, "") [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `writeln!(f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `writeln!(f, "")` [INFO] [stderr] --> src/packet/error_cause.rs:88:17 [INFO] [stderr] | [INFO] [stderr] 88 | writeln!(f, "") [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `writeln!(f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/stack/association/mod.rs:91:13 [INFO] [stderr] | [INFO] [stderr] 91 | next_send_tsn: next_send_tsn, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `next_send_tsn` [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/stack/association/mod.rs:452:13 [INFO] [stderr] | [INFO] [stderr] 452 | initiate_tag: initiate_tag, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `initiate_tag` [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: using `writeln!(f, "")` [INFO] [stderr] --> src/stack/cookie.rs:128:9 [INFO] [stderr] | [INFO] [stderr] 128 | writeln!(f, "")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `writeln!(f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/stack/lowerlayer.rs:70:13 [INFO] [stderr] | [INFO] [stderr] 70 | socket: socket, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `socket` [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/stack/lowerlayer.rs:71:13 [INFO] [stderr] | [INFO] [stderr] 71 | address: address, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `address` [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/stack/lowerlayer.rs:96:17 [INFO] [stderr] | [INFO] [stderr] 96 | buffer: buffer, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `buffer` [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/stack/lowerlayer.rs:98:17 [INFO] [stderr] | [INFO] [stderr] 98 | address: address, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `address` [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/stack/sync.rs:137:13 [INFO] [stderr] | [INFO] [stderr] 137 | buffer: buffer, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `buffer` [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/stack/mod.rs:147:17 [INFO] [stderr] | [INFO] [stderr] 147 | timer: timer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `timer` [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/stack/mod.rs:148:17 [INFO] [stderr] | [INFO] [stderr] 148 | secret: secret, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `secret` [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/lib.rs:112:13 [INFO] [stderr] | [INFO] [stderr] 112 | buffer: buffer, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `buffer` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/packet/chunk.rs:787:5 [INFO] [stderr] | [INFO] [stderr] 787 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/packet/chunk.rs:764:18 [INFO] [stderr] | [INFO] [stderr] 764 | let result = match tag { [INFO] [stderr] | __________________^ [INFO] [stderr] 765 | | DATA_TYPE => data_chunk(flags, value), [INFO] [stderr] 766 | | INIT_TYPE => init_chunk(flags, value), [INFO] [stderr] 767 | | INITACK_TYPE => initack_chunk(flags, value), [INFO] [stderr] ... | [INFO] [stderr] 785 | | )), [INFO] [stderr] 786 | | }; [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/packet/writer.rs:136:9 [INFO] [stderr] | [INFO] [stderr] 136 | return self.data.len(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.data.len()` [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/packet/writer.rs:139:9 [INFO] [stderr] | [INFO] [stderr] 139 | return DEFAULT_MTU; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `DEFAULT_MTU` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/stack/association/mod.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | stream [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/stack/association/mod.rs:99:22 [INFO] [stderr] | [INFO] [stderr] 99 | let stream = match self.streams.entry(stream_id) { [INFO] [stderr] | ______________________^ [INFO] [stderr] 100 | | Vacant(entry) => entry.insert(Stream::new(stream_id)), [INFO] [stderr] 101 | | Occupied(entry) => entry.into_mut(), [INFO] [stderr] 102 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/stack/association/mod.rs:801:16 [INFO] [stderr] | [INFO] [stderr] 801 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 802 | | if sctp_packet.header.verification_tag != self.local_verification_tag { [INFO] [stderr] 803 | | error!("error: invalid verification tag for this association"); [INFO] [stderr] 804 | | return; [INFO] [stderr] 805 | | } [INFO] [stderr] 806 | | } [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] 801 | } else if sctp_packet.header.verification_tag != self.local_verification_tag { [INFO] [stderr] 802 | error!("error: invalid verification tag for this association"); [INFO] [stderr] 803 | return; [INFO] [stderr] 804 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/stack/cookie.rs:53:49 [INFO] [stderr] | [INFO] [stderr] 53 | const NANOSECONDS_IN_MILLISECOND: u64 = 1000000; [INFO] [stderr] | ^^^^^^^ help: consider: `1_000_000` [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: unneeded return statement [INFO] [stderr] --> src/stack/queue.rs:69:9 [INFO] [stderr] | [INFO] [stderr] 69 | return &self.0.tsn; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `&self.0.tsn` [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: long literal lacking separators [INFO] [stderr] --> src/stack/settings.rs:37:39 [INFO] [stderr] | [INFO] [stderr] 37 | secret_key_regeneration_interval: 900000, // milliseconds (15 minutes) [INFO] [stderr] | ^^^^^^ help: consider: `900_000` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/stack/sync.rs:127:9 [INFO] [stderr] | [INFO] [stderr] 127 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/stack/sync.rs:126:22 [INFO] [stderr] | [INFO] [stderr] 126 | let result = self.send_cmd(AssociationCommand::Send(message, return_tx), return_rx)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/stack/sync.rs:173:9 [INFO] [stderr] | [INFO] [stderr] 173 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/stack/sync.rs:172:22 [INFO] [stderr] | [INFO] [stderr] 172 | let result = self.send_cmd(AssociationCommand::Shutdown(return_tx), return_rx)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/util/serial.rs:118:16 [INFO] [stderr] | [INFO] [stderr] 118 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 119 | | if self.0 - other.0 > T::THRESHOLD { [INFO] [stderr] 120 | | Ordering::Less [INFO] [stderr] 121 | | } else { [INFO] [stderr] 122 | | Ordering::Greater [INFO] [stderr] 123 | | } [INFO] [stderr] 124 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 118 | } else if self.0 - other.0 > T::THRESHOLD { [INFO] [stderr] 119 | Ordering::Less [INFO] [stderr] 120 | } else { [INFO] [stderr] 121 | Ordering::Greater [INFO] [stderr] 122 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/packet/checksum.rs:100:44 [INFO] [stderr] | [INFO] [stderr] 100 | const PACKET1_EXPECTED_CHECKSUM: u32 = 0x1ad32efb; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x1ad3_2efb` [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/packet/checksum.rs:111:44 [INFO] [stderr] | [INFO] [stderr] 111 | const PACKET2_EXPECTED_CHECKSUM: u32 = 0x6305dcfd; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x6305_dcfd` [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/packet/checksum.rs:119:44 [INFO] [stderr] | [INFO] [stderr] 119 | const PACKET3_EXPECTED_CHECKSUM: u32 = 0x6a66bf89; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x6a66_bf89` [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/packet/checksum.rs:142:52 [INFO] [stderr] | [INFO] [stderr] 142 | assert_eq!(read(&clear_checksum(PACKET1)), 0x00000000); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0000_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/packet/checksum.rs:143:52 [INFO] [stderr] | [INFO] [stderr] 143 | assert_eq!(read(&clear_checksum(PACKET2)), 0x00000000); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0000_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/packet/checksum.rs:144:52 [INFO] [stderr] | [INFO] [stderr] 144 | assert_eq!(read(&clear_checksum(PACKET3)), 0x00000000); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0000_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/packet/checksum.rs:145:51 [INFO] [stderr] | [INFO] [stderr] 145 | assert_eq!(read(&fill_checksum(PACKET1)), 0xffffffff); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xffff_ffff` [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/packet/checksum.rs:146:51 [INFO] [stderr] | [INFO] [stderr] 146 | assert_eq!(read(&fill_checksum(PACKET2)), 0xffffffff); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xffff_ffff` [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/packet/checksum.rs:147:51 [INFO] [stderr] | [INFO] [stderr] 147 | assert_eq!(read(&fill_checksum(PACKET3)), 0xffffffff); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xffff_ffff` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/packet/chunk.rs:787:5 [INFO] [stderr] | [INFO] [stderr] 787 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/packet/chunk.rs:764:18 [INFO] [stderr] | [INFO] [stderr] 764 | let result = match tag { [INFO] [stderr] | __________________^ [INFO] [stderr] 765 | | DATA_TYPE => data_chunk(flags, value), [INFO] [stderr] 766 | | INIT_TYPE => init_chunk(flags, value), [INFO] [stderr] 767 | | INITACK_TYPE => initack_chunk(flags, value), [INFO] [stderr] ... | [INFO] [stderr] 785 | | )), [INFO] [stderr] 786 | | }; [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/packet/chunk.rs:848:18 [INFO] [stderr] | [INFO] [stderr] 848 | tsn: 0x00000101.into(), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0000_0101` [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/packet/chunk.rs:851:34 [INFO] [stderr] | [INFO] [stderr] 851 | payload_protocol_id: 0x12345678, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x1234_5678` [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/packet/chunk.rs:908:27 [INFO] [stderr] | [INFO] [stderr] 908 | initiate_tag: 1780920053, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_780_920_053` [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/packet/chunk.rs:909:21 [INFO] [stderr] | [INFO] [stderr] 909 | a_rwnd: 106496, [INFO] [stderr] | ^^^^^^ help: consider: `106_496` [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/packet/chunk.rs:912:26 [INFO] [stderr] | [INFO] [stderr] 912 | initial_tsn: 2545339388, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `2_545_339_388` [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/packet/chunk.rs:1045:27 [INFO] [stderr] | [INFO] [stderr] 1045 | initiate_tag: 3863318533, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `3_863_318_533` [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/packet/chunk.rs:1046:21 [INFO] [stderr] | [INFO] [stderr] 1046 | a_rwnd: 106496, [INFO] [stderr] | ^^^^^^ help: consider: `106_496` [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/packet/chunk.rs:1049:26 [INFO] [stderr] | [INFO] [stderr] 1049 | initial_tsn: 2723440467, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `2_723_440_467` [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/packet/chunk.rs:1152:42 [INFO] [stderr] | [INFO] [stderr] 1152 | cumulative_tsn_ack: TSN::new(401335079), [INFO] [stderr] | ^^^^^^^^^ help: consider: `401_335_079` [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/packet/chunk.rs:1153:21 [INFO] [stderr] | [INFO] [stderr] 1153 | a_rwnd: 106496, [INFO] [stderr] | ^^^^^^ help: consider: `106_496` [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/packet/chunk.rs:1388:36 [INFO] [stderr] | [INFO] [stderr] 1388 | cumulative_tsn_ack: Serial(2723440466), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `2_723_440_466` [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/packet/error_cause.rs:401:33 [INFO] [stderr] | [INFO] [stderr] 401 | ErrorCause::StaleCookie(0x01020304) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0102_0304` [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/packet/error_cause.rs:542:32 [INFO] [stderr] | [INFO] [stderr] 542 | ErrorCause::NoUserData(0x01020304) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0102_0304` [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/packet/parameter.rs:584:39 [INFO] [stderr] | [INFO] [stderr] 584 | Parameter::CookiePreservative(0xfffe0201) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xfffe_0201` [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: unneeded return statement [INFO] [stderr] --> src/packet/writer.rs:136:9 [INFO] [stderr] | [INFO] [stderr] 136 | return self.data.len(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.data.len()` [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/packet/writer.rs:139:9 [INFO] [stderr] | [INFO] [stderr] 139 | return DEFAULT_MTU; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `DEFAULT_MTU` [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: long literal lacking separators [INFO] [stderr] --> src/packet/mod.rs:143:27 [INFO] [stderr] | [INFO] [stderr] 143 | initiate_tag: 1674998879, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_674_998_879` [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/packet/mod.rs:144:21 [INFO] [stderr] | [INFO] [stderr] 144 | a_rwnd: 106496, [INFO] [stderr] | ^^^^^^ help: consider: `106_496` [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/packet/mod.rs:147:26 [INFO] [stderr] | [INFO] [stderr] 147 | initial_tsn: 205815080, [INFO] [stderr] | ^^^^^^^^^ help: consider: `205_815_080` [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/packet/mod.rs:203:42 [INFO] [stderr] | [INFO] [stderr] 203 | cumulative_tsn_ack: TSN::new(401335078), [INFO] [stderr] | ^^^^^^^^^ help: consider: `401_335_078` [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/packet/mod.rs:204:21 [INFO] [stderr] | [INFO] [stderr] 204 | a_rwnd: 106479, [INFO] [stderr] | ^^^^^^ help: consider: `106_479` [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/packet/mod.rs:217:52 [INFO] [stderr] | [INFO] [stderr] 217 | assert_eq!(packet.header.verification_tag, 0xd9c98899); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xd9c9_8899` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/stack/association/mod.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | stream [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/stack/association/mod.rs:99:22 [INFO] [stderr] | [INFO] [stderr] 99 | let stream = match self.streams.entry(stream_id) { [INFO] [stderr] | ______________________^ [INFO] [stderr] 100 | | Vacant(entry) => entry.insert(Stream::new(stream_id)), [INFO] [stderr] 101 | | Occupied(entry) => entry.into_mut(), [INFO] [stderr] 102 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/stack/association/mod.rs:801:16 [INFO] [stderr] | [INFO] [stderr] 801 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 802 | | if sctp_packet.header.verification_tag != self.local_verification_tag { [INFO] [stderr] 803 | | error!("error: invalid verification tag for this association"); [INFO] [stderr] 804 | | return; [INFO] [stderr] 805 | | } [INFO] [stderr] 806 | | } [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] 801 | } else if sctp_packet.header.verification_tag != self.local_verification_tag { [INFO] [stderr] 802 | error!("error: invalid verification tag for this association"); [INFO] [stderr] 803 | return; [INFO] [stderr] 804 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/stack/cookie.rs:53:49 [INFO] [stderr] | [INFO] [stderr] 53 | const NANOSECONDS_IN_MILLISECOND: u64 = 1000000; [INFO] [stderr] | ^^^^^^^ help: consider: `1_000_000` [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: unneeded return statement [INFO] [stderr] --> src/stack/queue.rs:69:9 [INFO] [stderr] | [INFO] [stderr] 69 | return &self.0.tsn; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `&self.0.tsn` [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/stack/queue.rs:579:13 [INFO] [stderr] | [INFO] [stderr] 579 | unordered_messages: _, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: Try with `TestData { chunks, ordered_messages: expected_messages, .. }` [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: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/stack/queue.rs:623:13 [INFO] [stderr] | [INFO] [stderr] 623 | ordered_messages: _, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `TestData { chunks, unordered_messages: mut expected_messages, .. }` [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: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/stack/queue.rs:675:13 [INFO] [stderr] | [INFO] [stderr] 675 | ordered_messages: _, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [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: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/stack/queue.rs:676:13 [INFO] [stderr] | [INFO] [stderr] 676 | unordered_messages: _, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `TestData { chunks, .. }` [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: long literal lacking separators [INFO] [stderr] --> src/stack/settings.rs:37:39 [INFO] [stderr] | [INFO] [stderr] 37 | secret_key_regeneration_interval: 900000, // milliseconds (15 minutes) [INFO] [stderr] | ^^^^^^ help: consider: `900_000` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/stack/sync.rs:127:9 [INFO] [stderr] | [INFO] [stderr] 127 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/stack/sync.rs:126:22 [INFO] [stderr] | [INFO] [stderr] 126 | let result = self.send_cmd(AssociationCommand::Send(message, return_tx), return_rx)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/stack/sync.rs:173:9 [INFO] [stderr] | [INFO] [stderr] 173 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/stack/sync.rs:172:22 [INFO] [stderr] | [INFO] [stderr] 172 | let result = self.send_cmd(AssociationCommand::Shutdown(return_tx), return_rx)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/util/serial.rs:118:16 [INFO] [stderr] | [INFO] [stderr] 118 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 119 | | if self.0 - other.0 > T::THRESHOLD { [INFO] [stderr] 120 | | Ordering::Less [INFO] [stderr] 121 | | } else { [INFO] [stderr] 122 | | Ordering::Greater [INFO] [stderr] 123 | | } [INFO] [stderr] 124 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 118 | } else if self.0 - other.0 > T::THRESHOLD { [INFO] [stderr] 119 | Ordering::Less [INFO] [stderr] 120 | } else { [INFO] [stderr] 121 | Ordering::Greater [INFO] [stderr] 122 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/util/tests.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | 0x00000000, 0x00000001, 0x00000002, 0x40404040, 0x7fffffff, 0x80000000, 0x80000001, 0xc0c0c0c0, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0000_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/util/tests.rs:5:17 [INFO] [stderr] | [INFO] [stderr] 5 | 0x00000000, 0x00000001, 0x00000002, 0x40404040, 0x7fffffff, 0x80000000, 0x80000001, 0xc0c0c0c0, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0000_0001` [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/util/tests.rs:5:29 [INFO] [stderr] | [INFO] [stderr] 5 | 0x00000000, 0x00000001, 0x00000002, 0x40404040, 0x7fffffff, 0x80000000, 0x80000001, 0xc0c0c0c0, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0000_0002` [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/util/tests.rs:5:41 [INFO] [stderr] | [INFO] [stderr] 5 | 0x00000000, 0x00000001, 0x00000002, 0x40404040, 0x7fffffff, 0x80000000, 0x80000001, 0xc0c0c0c0, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x4040_4040` [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/util/tests.rs:5:53 [INFO] [stderr] | [INFO] [stderr] 5 | 0x00000000, 0x00000001, 0x00000002, 0x40404040, 0x7fffffff, 0x80000000, 0x80000001, 0xc0c0c0c0, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x7fff_ffff` [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/util/tests.rs:5:65 [INFO] [stderr] | [INFO] [stderr] 5 | 0x00000000, 0x00000001, 0x00000002, 0x40404040, 0x7fffffff, 0x80000000, 0x80000001, 0xc0c0c0c0, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x8000_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/util/tests.rs:5:77 [INFO] [stderr] | [INFO] [stderr] 5 | 0x00000000, 0x00000001, 0x00000002, 0x40404040, 0x7fffffff, 0x80000000, 0x80000001, 0xc0c0c0c0, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x8000_0001` [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/util/tests.rs:5:89 [INFO] [stderr] | [INFO] [stderr] 5 | 0x00000000, 0x00000001, 0x00000002, 0x40404040, 0x7fffffff, 0x80000000, 0x80000001, 0xc0c0c0c0, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xc0c0_c0c0` [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/util/tests.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | 0xfffffffd, 0xfffffffe, 0xffffffff, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xffff_fffd` [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/util/tests.rs:6:17 [INFO] [stderr] | [INFO] [stderr] 6 | 0xfffffffd, 0xfffffffe, 0xffffffff, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xffff_fffe` [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/util/tests.rs:6:29 [INFO] [stderr] | [INFO] [stderr] 6 | 0xfffffffd, 0xfffffffe, 0xffffffff, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xffff_ffff` [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: unneeded unit return type [INFO] [stderr] --> src/util/tests.rs:208:34 [INFO] [stderr] | [INFO] [stderr] 208 | pub fn test_generate_test_data() -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/checksum.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | (packet[CHECKSUM_START_OFFSET + 3] as u32) << 24 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(packet[CHECKSUM_START_OFFSET + 3])` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/checksum.rs:16:11 [INFO] [stderr] | [INFO] [stderr] 16 | | (packet[CHECKSUM_START_OFFSET + 2] as u32) << 16 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(packet[CHECKSUM_START_OFFSET + 2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/checksum.rs:17:11 [INFO] [stderr] | [INFO] [stderr] 17 | | (packet[CHECKSUM_START_OFFSET + 1] as u32) << 8 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(packet[CHECKSUM_START_OFFSET + 1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/checksum.rs:18:11 [INFO] [stderr] | [INFO] [stderr] 18 | | (packet[CHECKSUM_START_OFFSET + 0] as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(packet[CHECKSUM_START_OFFSET + 0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `CHECKSUM_START_OFFSET` [INFO] [stderr] --> src/packet/checksum.rs:18:19 [INFO] [stderr] | [INFO] [stderr] 18 | | (packet[CHECKSUM_START_OFFSET + 0] as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `CHECKSUM_START_OFFSET` [INFO] [stderr] --> src/packet/checksum.rs:52:12 [INFO] [stderr] | [INFO] [stderr] 52 | packet[CHECKSUM_START_OFFSET + 0] = (checksum & 0xFF) as u8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/packet/chunk.rs:58:9 [INFO] [stderr] | [INFO] [stderr] 58 | / match self { [INFO] [stderr] 59 | | &Chunk::Data(ref c) => c, [INFO] [stderr] 60 | | &Chunk::Init(ref c) => c, [INFO] [stderr] 61 | | &Chunk::InitAck(ref c) => c, [INFO] [stderr] ... | [INFO] [stderr] 72 | | &Chunk::Unknown(ref c) => c, [INFO] [stderr] 73 | | } [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] 58 | match *self { [INFO] [stderr] 59 | Chunk::Data(ref c) => c, [INFO] [stderr] 60 | Chunk::Init(ref c) => c, [INFO] [stderr] 61 | Chunk::InitAck(ref c) => c, [INFO] [stderr] 62 | Chunk::Sack(ref c) => c, [INFO] [stderr] 63 | Chunk::Heartbeat(ref c) => c, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/packet/chunk.rs:85:9 [INFO] [stderr] | [INFO] [stderr] 85 | / match self { [INFO] [stderr] 86 | | &Chunk::Data(ref c) => c.fmt(f), [INFO] [stderr] 87 | | &Chunk::Init(ref c) => c.fmt(f), [INFO] [stderr] 88 | | &Chunk::InitAck(ref c) => c.fmt(f), [INFO] [stderr] ... | [INFO] [stderr] 99 | | &Chunk::Unknown(ref c) => c.fmt(f), [INFO] [stderr] 100 | | } [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] 85 | match *self { [INFO] [stderr] 86 | Chunk::Data(ref c) => c.fmt(f), [INFO] [stderr] 87 | Chunk::Init(ref c) => c.fmt(f), [INFO] [stderr] 88 | Chunk::InitAck(ref c) => c.fmt(f), [INFO] [stderr] 89 | Chunk::Sack(ref c) => c.fmt(f), [INFO] [stderr] 90 | Chunk::Heartbeat(ref c) => c.fmt(f), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/packet/error_cause.rs:229:5 [INFO] [stderr] | [INFO] [stderr] 229 | / match error_cause { [INFO] [stderr] 230 | | &ErrorCause::InvalidStreamIdentifier(stream_id) => { [INFO] [stderr] 231 | | writer.open_tlv(INVALID_STREAM_IDENTIFIER_TYPE)?; [INFO] [stderr] 232 | | writer.write_be16(stream_id)?; [INFO] [stderr] ... | [INFO] [stderr] 304 | | } [INFO] [stderr] 305 | | }; [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] 229 | match *error_cause { [INFO] [stderr] 230 | ErrorCause::InvalidStreamIdentifier(stream_id) => { [INFO] [stderr] 231 | writer.open_tlv(INVALID_STREAM_IDENTIFIER_TYPE)?; [INFO] [stderr] 232 | writer.write_be16(stream_id)?; [INFO] [stderr] 233 | writer.write_be16(0)?; // reserved [INFO] [stderr] 234 | writer.close_tlv()?; [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/packet/parameter.rs:56:30 [INFO] [stderr] | [INFO] [stderr] 56 | pub fn from_bytes(bytes: &[u8; 4]) -> IPv4Address { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `[u8; 4]` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:58:21 [INFO] [stderr] | [INFO] [stderr] 58 | value: ((bytes[0] as u32) << 24) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(bytes[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:59:20 [INFO] [stderr] | [INFO] [stderr] 59 | | ((bytes[1] as u32) << 16) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(bytes[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:60:20 [INFO] [stderr] | [INFO] [stderr] 60 | | ((bytes[2] as u32) << 8) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(bytes[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `(bytes[3] as u32)` [INFO] [stderr] --> src/packet/parameter.rs:61:19 [INFO] [stderr] | [INFO] [stderr] 61 | | ((bytes[3] as u32) << 0), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:61:20 [INFO] [stderr] | [INFO] [stderr] 61 | | ((bytes[3] as u32) << 0), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(bytes[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `self.value` [INFO] [stderr] --> src/packet/parameter.rs:73:13 [INFO] [stderr] | [INFO] [stderr] 73 | (self.value >> 0) & 0xFF [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:97:13 [INFO] [stderr] | [INFO] [stderr] 97 | (self.value[0] as u16) << 8 | self.value[1] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:97:43 [INFO] [stderr] | [INFO] [stderr] 97 | (self.value[0] as u16) << 8 | self.value[1] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:98:13 [INFO] [stderr] | [INFO] [stderr] 98 | (self.value[2] as u16) << 8 | self.value[3] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:98:43 [INFO] [stderr] | [INFO] [stderr] 98 | (self.value[2] as u16) << 8 | self.value[3] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:99:13 [INFO] [stderr] | [INFO] [stderr] 99 | (self.value[4] as u16) << 8 | self.value[5] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[4])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:99:43 [INFO] [stderr] | [INFO] [stderr] 99 | (self.value[4] as u16) << 8 | self.value[5] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[5])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:100:13 [INFO] [stderr] | [INFO] [stderr] 100 | (self.value[6] as u16) << 8 | self.value[7] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[6])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:100:43 [INFO] [stderr] | [INFO] [stderr] 100 | (self.value[6] as u16) << 8 | self.value[7] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[7])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:101:13 [INFO] [stderr] | [INFO] [stderr] 101 | (self.value[8] as u16) << 8 | self.value[9] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[8])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:101:43 [INFO] [stderr] | [INFO] [stderr] 101 | (self.value[8] as u16) << 8 | self.value[9] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[9])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:102:13 [INFO] [stderr] | [INFO] [stderr] 102 | (self.value[10] as u16) << 8 | self.value[11] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[10])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:102:44 [INFO] [stderr] | [INFO] [stderr] 102 | (self.value[10] as u16) << 8 | self.value[11] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[11])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:103:13 [INFO] [stderr] | [INFO] [stderr] 103 | (self.value[12] as u16) << 8 | self.value[13] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[12])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:103:44 [INFO] [stderr] | [INFO] [stderr] 103 | (self.value[12] as u16) << 8 | self.value[13] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[13])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:104:13 [INFO] [stderr] | [INFO] [stderr] 104 | (self.value[14] as u16) << 8 | self.value[15] as u16 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[14])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:104:44 [INFO] [stderr] | [INFO] [stderr] 104 | (self.value[14] as u16) << 8 | self.value[15] as u16 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[15])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/packet/parameter.rs:275:5 [INFO] [stderr] | [INFO] [stderr] 275 | / match parameter { [INFO] [stderr] 276 | | &Parameter::HeartbeatInfo(ref v) => { [INFO] [stderr] 277 | | writer.open_tlv(HEARTBEAT_INFO_TYPE)?; [INFO] [stderr] 278 | | writer.write_bytes(v)?; [INFO] [stderr] ... | [INFO] [stderr] 331 | | } [INFO] [stderr] 332 | | }; [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] 275 | match *parameter { [INFO] [stderr] 276 | Parameter::HeartbeatInfo(ref v) => { [INFO] [stderr] 277 | writer.open_tlv(HEARTBEAT_INFO_TYPE)?; [INFO] [stderr] 278 | writer.write_bytes(v)?; [INFO] [stderr] 279 | writer.close_tlv()?; [INFO] [stderr] 280 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/packet/writer.rs:19:9 [INFO] [stderr] | [INFO] [stderr] 19 | / match self { [INFO] [stderr] 20 | | &ErrorKind::MtuReached => write!(f, "MtuReached"), [INFO] [stderr] 21 | | } [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] 19 | match *self { [INFO] [stderr] 20 | ErrorKind::MtuReached => write!(f, "MtuReached"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/packet/writer.rs:45:26 [INFO] [stderr] | [INFO] [stderr] 45 | self.write_byte(((value >> 0) & 0xFF) as u8)?; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/packet/writer.rs:52:26 [INFO] [stderr] | [INFO] [stderr] 52 | self.write_byte(((value >> 0) & 0xFF) as u8)?; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/writer.rs:67:24 [INFO] [stderr] | [INFO] [stderr] 67 | self.open_tlv(((tag as u16) << 8) | (flags as u16)) [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `u16::from(tag)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/writer.rs:67:45 [INFO] [stderr] | [INFO] [stderr] 67 | self.open_tlv(((tag as u16) << 8) | (flags as u16)) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u16::from(flags)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `length` [INFO] [stderr] --> src/packet/writer.rs:82:51 [INFO] [stderr] | [INFO] [stderr] 82 | self.write_byte_offset(length_index + 1, ((length >> 0) & 0xFF) as u8)?; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/packet/writer.rs:117:21 [INFO] [stderr] | [INFO] [stderr] 117 | pub fn to_owned(self) -> Vec { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/stack/association/retransmission.rs:123:50 [INFO] [stderr] | [INFO] [stderr] 123 | let ack_start = cumulative_tsn_ack + block.start as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `u32::from(block.start)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/stack/association/retransmission.rs:124:48 [INFO] [stderr] | [INFO] [stderr] 124 | let ack_end = cumulative_tsn_ack + block.end as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u32::from(block.end)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/stack/association/retransmission.rs:191:21 [INFO] [stderr] | [INFO] [stderr] 191 | let rtx_chunk = association.data.sent_queue.front().map(|c| c.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `association.data.sent_queue.front().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: Calling `subsec_micros()` is more concise than this calculation [INFO] [stderr] --> src/stack/association/retransmission.rs:374:53 [INFO] [stderr] | [INFO] [stderr] 374 | duration.as_secs() as u32 * 1_000_000 + duration.subsec_nanos() / 1_000 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `duration.subsec_micros()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::duration_subsec)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#duration_subsec [INFO] [stderr] [INFO] [stderr] warning: consider using `Option` instead of `Option>` or a custom enum if you need to distinguish all 3 cases [INFO] [stderr] --> src/stack/association/mod.rs:162:15 [INFO] [stderr] | [INFO] [stderr] 162 | do_close: Option>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_option)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_option [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (10/7) [INFO] [stderr] --> src/stack/association/mod.rs:251:5 [INFO] [stderr] | [INFO] [stderr] 251 | / fn instantiate( [INFO] [stderr] 252 | | state: AssociationState, [INFO] [stderr] 253 | | resources: StackResources, [INFO] [stderr] 254 | | network_state: NetworkState, [INFO] [stderr] ... | [INFO] [stderr] 291 | | } [INFO] [stderr] 292 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (10/7) [INFO] [stderr] --> src/stack/association/mod.rs:366:5 [INFO] [stderr] | [INFO] [stderr] 366 | / fn instantiate_connect( [INFO] [stderr] 367 | | local_port: u16, [INFO] [stderr] 368 | | sctp_peer: SocketAddr, [INFO] [stderr] 369 | | llp_peer: SocketAddr, [INFO] [stderr] ... | [INFO] [stderr] 402 | | ) [INFO] [stderr] 403 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/stack/association/mod.rs:674:29 [INFO] [stderr] | [INFO] [stderr] 674 | .filter_map(|x| match x { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 675 | | &Parameter::StateCookie(ref c) => Some(c), [INFO] [stderr] 676 | | _ => None, [INFO] [stderr] 677 | | }).next(); [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] 674 | .filter_map(|x| match *x { [INFO] [stderr] 675 | Parameter::StateCookie(ref c) => Some(c), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/stack/association/mod.rs:777:13 [INFO] [stderr] | [INFO] [stderr] 777 | / match chunk { [INFO] [stderr] 778 | | &mut Chunk::Init(_) => has_init = true, [INFO] [stderr] 779 | | &mut Chunk::CookieEcho(_) => has_cookie_echo = true, [INFO] [stderr] 780 | | &mut Chunk::ShutdownComplete(_) => _has_shutdown_complete = true, [INFO] [stderr] 781 | | &mut Chunk::Abort(_) => _has_abort = true, [INFO] [stderr] 782 | | _ => {} [INFO] [stderr] 783 | | } [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] 777 | match *chunk { [INFO] [stderr] 778 | Chunk::Init(_) => has_init = true, [INFO] [stderr] 779 | Chunk::CookieEcho(_) => has_cookie_echo = true, [INFO] [stderr] 780 | Chunk::ShutdownComplete(_) => _has_shutdown_complete = true, [INFO] [stderr] 781 | Chunk::Abort(_) => _has_abort = true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 46 [INFO] [stderr] --> src/stack/association/mod.rs:1354:5 [INFO] [stderr] | [INFO] [stderr] 1354 | / fn poll(&mut self) -> Poll, io::Error> { [INFO] [stderr] 1355 | | // Handle timeouts [INFO] [stderr] 1356 | | // TODO: This timer stuff is just begging to be refactored. [INFO] [stderr] 1357 | | [INFO] [stderr] ... | [INFO] [stderr] 1634 | | Ok(Async::NotReady) [INFO] [stderr] 1635 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [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/stack/association/mod.rs:1409:21 [INFO] [stderr] | [INFO] [stderr] 1409 | / match self.state { [INFO] [stderr] 1410 | | ShutdownSent => self.shutdown_abort(), [INFO] [stderr] 1411 | | _ => {} [INFO] [stderr] 1412 | | }; [INFO] [stderr] | |_____________________^ help: try this: `if let ShutdownSent = self.state { self.shutdown_abort() }` [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] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/stack/association/mod.rs:1554:28 [INFO] [stderr] | [INFO] [stderr] 1554 | if let Some(_) = self.do_close { [INFO] [stderr] | _____________________- ^^^^^^^ [INFO] [stderr] 1555 | | // Disallow concurrent aborts. [INFO] [stderr] 1556 | | // TODO: return an error via the tx [INFO] [stderr] 1557 | | return_tx.send(()).unwrap(); [INFO] [stderr] ... | [INFO] [stderr] 1573 | | self.do_close = Some(Some(return_tx)); [INFO] [stderr] 1574 | | } [INFO] [stderr] | |_____________________- help: try this: `if self.do_close.is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [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/stack/association/mod.rs:1617:9 [INFO] [stderr] | [INFO] [stderr] 1617 | / match self.outgoing_packets.pop_front() { [INFO] [stderr] 1618 | | Some(packet) => return Ok(Async::Ready(Some(packet))), [INFO] [stderr] 1619 | | None => {} [INFO] [stderr] 1620 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(packet) = self.outgoing_packets.pop_front() { return Ok(Async::Ready(Some(packet))) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `stack::cookie::Secret` [INFO] [stderr] --> src/stack/cookie.rs:48:5 [INFO] [stderr] | [INFO] [stderr] 48 | / pub fn new() -> Secret { [INFO] [stderr] 49 | | let mut key = [0u8; BLAKE2B_MAC_SIZE]; [INFO] [stderr] 50 | | let previous_key = [0u8; BLAKE2B_MAC_SIZE]; [INFO] [stderr] 51 | | rand::thread_rng().fill_bytes(&mut key); [INFO] [stderr] ... | [INFO] [stderr] 66 | | } [INFO] [stderr] 67 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 47 | impl Default for stack::cookie::Secret { [INFO] [stderr] 48 | fn default() -> Self { [INFO] [stderr] 49 | Self::new() [INFO] [stderr] 50 | } [INFO] [stderr] 51 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (10/7) [INFO] [stderr] --> src/stack/cookie.rs:158:5 [INFO] [stderr] | [INFO] [stderr] 158 | / pub fn new( [INFO] [stderr] 159 | | local_port: u16, [INFO] [stderr] 160 | | sctp_peer: SocketAddr, [INFO] [stderr] 161 | | llp_peer: SocketAddr, [INFO] [stderr] ... | [INFO] [stderr] 182 | | } [INFO] [stderr] 183 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: statement can be reduced [INFO] [stderr] --> src/stack/cookie.rs:242:9 [INFO] [stderr] | [INFO] [stderr] 242 | &mut serialization[0..BLAKE2B_MAC_SIZE].clone_from_slice(&mac); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `serialization[0..BLAKE2B_MAC_SIZE].clone_from_slice(&mac);` [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: the loop variable `i` is used to index `rendered` [INFO] [stderr] --> src/stack/lowerlayer.rs:36:14 [INFO] [stderr] | [INFO] [stderr] 36 | for i in 0..rendered.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 36 | for (i, ) in rendered.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/stack/lowerlayer.rs:36:14 [INFO] [stderr] | [INFO] [stderr] 36 | for i in 0..rendered.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try replacing the loop by: `llp_packet.buffer[..rendered.len()].clone_from_slice(&rendered[..])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `stack::queue::OrderedDataQueue` [INFO] [stderr] --> src/stack/queue.rs:118:5 [INFO] [stderr] | [INFO] [stderr] 118 | / pub fn new() -> OrderedDataQueue { [INFO] [stderr] 119 | | let heap = BinaryHeap::>::new(); [INFO] [stderr] 120 | | let list = LinkedList::::new(); [INFO] [stderr] 121 | | OrderedDataQueue { [INFO] [stderr] ... | [INFO] [stderr] 125 | | } [INFO] [stderr] 126 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 116 | impl Default for stack::queue::OrderedDataQueue { [INFO] [stderr] 117 | fn default() -> Self { [INFO] [stderr] 118 | Self::new() [INFO] [stderr] 119 | } [INFO] [stderr] 120 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/stack/queue.rs:155:9 [INFO] [stderr] | [INFO] [stderr] 155 | / loop { [INFO] [stderr] 156 | | let (heap_tsn, heap_ssn, heap_begin) = if let Some(c) = self.heap.peek() { [INFO] [stderr] 157 | | ((c.0).0.tsn, (c.0).0.ssn, (c.0).0.beginning_fragment) [INFO] [stderr] 158 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 175 | | } [INFO] [stderr] 176 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(c) = self.heap.peek() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/stack/queue.rs:235:13 [INFO] [stderr] | [INFO] [stderr] 235 | for ref c in &self.heap { [INFO] [stderr] | ^^^^^ ---------- help: try: `let c = &&self.heap;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `stack::queue::UnorderedDataQueue` [INFO] [stderr] --> src/stack/queue.rs:253:5 [INFO] [stderr] | [INFO] [stderr] 253 | / pub fn new() -> UnorderedDataQueue { [INFO] [stderr] 254 | | let tree = BTreeMap::::new(); [INFO] [stderr] 255 | | UnorderedDataQueue { tree } [INFO] [stderr] 256 | | } [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] 246 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/stack/queue.rs:334:27 [INFO] [stderr] | [INFO] [stderr] 334 | for (_, ref c) in &self.tree { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 334 | for ref c in self.tree.values() { [INFO] [stderr] | ^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `stack::queue::OutgoingDataQueue` [INFO] [stderr] --> src/stack/queue.rs:367:5 [INFO] [stderr] | [INFO] [stderr] 367 | / pub fn new() -> OutgoingDataQueue { [INFO] [stderr] 368 | | OutgoingDataQueue { [INFO] [stderr] 369 | | set: BTreeSet::new(), [INFO] [stderr] 370 | | tracker: BufferTracker::new(), [INFO] [stderr] 371 | | } [INFO] [stderr] 372 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 365 | impl Default for stack::queue::OutgoingDataQueue { [INFO] [stderr] 366 | fn default() -> Self { [INFO] [stderr] 367 | Self::new() [INFO] [stderr] 368 | } [INFO] [stderr] 369 | } [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/stack/recvtracker.rs:57:17 [INFO] [stderr] | [INFO] [stderr] 57 | fn adjacent(&self, other: &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/stack/recvtracker.rs:57:31 [INFO] [stderr] | [INFO] [stderr] 57 | fn adjacent(&self, other: &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/stack/recvtracker.rs:60:16 [INFO] [stderr] | [INFO] [stderr] 60 | fn combine(&self, other: &Self) -> TSNRange { [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/stack/recvtracker.rs:60:30 [INFO] [stderr] | [INFO] [stderr] 60 | fn combine(&self, other: &Self) -> TSNRange { [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/stack/recvtracker.rs:195:45 [INFO] [stderr] | [INFO] [stderr] 195 | let max_gap = self.cumulative_tsn + ::std::u16::MAX as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(::std::u16::MAX)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/stack/mod.rs:48:9 [INFO] [stderr] | [INFO] [stderr] 48 | / match self { [INFO] [stderr] 49 | | &Timeout::None => None, [INFO] [stderr] 50 | | &Timeout::Default => default.map(|d| timer.sleep(d)), [INFO] [stderr] 51 | | &Timeout::Some(duration) => Some(timer.sleep(duration)), [INFO] [stderr] 52 | | } [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] 48 | match *self { [INFO] [stderr] 49 | Timeout::None => None, [INFO] [stderr] 50 | Timeout::Default => default.map(|d| timer.sleep(d)), [INFO] [stderr] 51 | Timeout::Some(duration) => Some(timer.sleep(duration)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/stack/mod.rs:55:9 [INFO] [stderr] | [INFO] [stderr] 55 | / match self { [INFO] [stderr] 56 | | &Timeout::None => None, [INFO] [stderr] 57 | | &Timeout::Default => default, [INFO] [stderr] 58 | | &Timeout::Some(duration) => Some(duration), [INFO] [stderr] 59 | | } [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] 55 | match *self { [INFO] [stderr] 56 | Timeout::None => None, [INFO] [stderr] 57 | Timeout::Default => default, [INFO] [stderr] 58 | Timeout::Some(duration) => Some(duration), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/stack/mod.rs:212:5 [INFO] [stderr] | [INFO] [stderr] 212 | / fn lookup_association<'a>( [INFO] [stderr] 213 | | &'a mut self, [INFO] [stderr] 214 | | sctp_peer: SocketAddr, [INFO] [stderr] 215 | | local_port: u16, [INFO] [stderr] ... | [INFO] [stderr] 224 | | None [INFO] [stderr] 225 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/stack/mod.rs:238:5 [INFO] [stderr] | [INFO] [stderr] 238 | / fn lookup_listening_association<'a>( [INFO] [stderr] 239 | | &'a mut self, [INFO] [stderr] 240 | | local_port: u16, [INFO] [stderr] 241 | | ) -> Option<&'a mut Association> { [INFO] [stderr] ... | [INFO] [stderr] 252 | | None [INFO] [stderr] 253 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/stack/mod.rs:243:13 [INFO] [stderr] | [INFO] [stderr] 243 | / match association.state { [INFO] [stderr] 244 | | AssociationState::Listen => { [INFO] [stderr] 245 | | if association.network.local_port == local_port { [INFO] [stderr] 246 | | return Some(association); [INFO] [stderr] ... | [INFO] [stderr] 249 | | _ => {} [INFO] [stderr] 250 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 243 | if let AssociationState::Listen = association.state { [INFO] [stderr] 244 | if association.network.local_port == local_port { [INFO] [stderr] 245 | return Some(association); [INFO] [stderr] 246 | } [INFO] [stderr] 247 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/stack/mod.rs:268:13 [INFO] [stderr] | [INFO] [stderr] 268 | / packet [INFO] [stderr] 269 | | .sctp_packet [INFO] [stderr] 270 | | .chunks [INFO] [stderr] 271 | | .iter() [INFO] [stderr] ... | [INFO] [stderr] 274 | | _ => false, [INFO] [stderr] 275 | | }).is_some() [INFO] [stderr] | |____________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/stack/mod.rs:272:31 [INFO] [stderr] | [INFO] [stderr] 272 | .find(|chunk| match chunk { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 273 | | &&Chunk::CookieEcho(_) => true, [INFO] [stderr] 274 | | _ => false, [INFO] [stderr] 275 | | }).is_some() [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] 272 | .find(|chunk| match *chunk { [INFO] [stderr] 273 | &Chunk::CookieEcho(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/stack/mod.rs:293:49 [INFO] [stderr] | [INFO] [stderr] 293 | } else if is_cookie_echo_packet(packet) { [INFO] [stderr] | _________________________________________________^ [INFO] [stderr] 294 | | // Note that we try to send COOKIE ECHO packets to regular associations, before [INFO] [stderr] 295 | | // looking for listening associations. [INFO] [stderr] 296 | | if self.association_exists(sctp_peer, packet.sctp_packet.header.destination_port) { [INFO] [stderr] ... | [INFO] [stderr] 300 | | } [INFO] [stderr] 301 | | } else { [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/stack/mod.rs:285:35 [INFO] [stderr] | [INFO] [stderr] 285 | if is_init_packet(packet) { [INFO] [stderr] | ___________________________________^ [INFO] [stderr] 286 | | // Note that we try to send INIT packets to regular associations, before [INFO] [stderr] 287 | | // looking for listening associations. [INFO] [stderr] 288 | | if self.association_exists(sctp_peer, packet.sctp_packet.header.destination_port) { [INFO] [stderr] ... | [INFO] [stderr] 292 | | } [INFO] [stderr] 293 | | } else if is_cookie_echo_packet(packet) { [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: item `util::buffer::Buffer` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/util/buffer.rs:15:1 [INFO] [stderr] | [INFO] [stderr] 15 | / impl Buffer { [INFO] [stderr] 16 | | pub fn new(slice: &[u8]) -> Buffer { [INFO] [stderr] 17 | | Buffer { [INFO] [stderr] 18 | | data: Rc::new(slice.to_vec()), [INFO] [stderr] ... | [INFO] [stderr] 66 | | } [INFO] [stderr] 67 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/util/buffer.rs:61:19 [INFO] [stderr] | [INFO] [stderr] 61 | pub fn to_vec(self) -> Vec { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `util::buffer::BufferTracker` [INFO] [stderr] --> src/util/buffer.rs:110:5 [INFO] [stderr] | [INFO] [stderr] 110 | / pub fn new() -> BufferTracker { [INFO] [stderr] 111 | | BufferTracker { [INFO] [stderr] 112 | | inner: Rc::new(RefCell::new(Inner { count: 0, bytes: 0 })), [INFO] [stderr] 113 | | } [INFO] [stderr] 114 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 109 | impl Default for util::buffer::BufferTracker { [INFO] [stderr] 110 | fn default() -> Self { [INFO] [stderr] 111 | Self::new() [INFO] [stderr] 112 | } [INFO] [stderr] 113 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/util/mod.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `webrtc-sctp`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/checksum.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | (packet[CHECKSUM_START_OFFSET + 3] as u32) << 24 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(packet[CHECKSUM_START_OFFSET + 3])` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/checksum.rs:16:11 [INFO] [stderr] | [INFO] [stderr] 16 | | (packet[CHECKSUM_START_OFFSET + 2] as u32) << 16 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(packet[CHECKSUM_START_OFFSET + 2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/checksum.rs:17:11 [INFO] [stderr] | [INFO] [stderr] 17 | | (packet[CHECKSUM_START_OFFSET + 1] as u32) << 8 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(packet[CHECKSUM_START_OFFSET + 1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/checksum.rs:18:11 [INFO] [stderr] | [INFO] [stderr] 18 | | (packet[CHECKSUM_START_OFFSET + 0] as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(packet[CHECKSUM_START_OFFSET + 0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `CHECKSUM_START_OFFSET` [INFO] [stderr] --> src/packet/checksum.rs:18:19 [INFO] [stderr] | [INFO] [stderr] 18 | | (packet[CHECKSUM_START_OFFSET + 0] as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `CHECKSUM_START_OFFSET` [INFO] [stderr] --> src/packet/checksum.rs:52:12 [INFO] [stderr] | [INFO] [stderr] 52 | packet[CHECKSUM_START_OFFSET + 0] = (checksum & 0xFF) as u8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the loop variable `offset` is only used to index `buffer`. [INFO] [stderr] --> src/packet/checksum.rs:123:23 [INFO] [stderr] | [INFO] [stderr] 123 | for offset in CHECKSUM_START_OFFSET..CHECKSUM_END_OFFSET { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 123 | for in buffer.iter_mut().take(CHECKSUM_END_OFFSET).skip(CHECKSUM_START_OFFSET) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `offset` is only used to index `buffer`. [INFO] [stderr] --> src/packet/checksum.rs:131:23 [INFO] [stderr] | [INFO] [stderr] 131 | for offset in CHECKSUM_START_OFFSET..CHECKSUM_END_OFFSET { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 131 | for in buffer.iter_mut().take(CHECKSUM_END_OFFSET).skip(CHECKSUM_START_OFFSET) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/packet/chunk.rs:58:9 [INFO] [stderr] | [INFO] [stderr] 58 | / match self { [INFO] [stderr] 59 | | &Chunk::Data(ref c) => c, [INFO] [stderr] 60 | | &Chunk::Init(ref c) => c, [INFO] [stderr] 61 | | &Chunk::InitAck(ref c) => c, [INFO] [stderr] ... | [INFO] [stderr] 72 | | &Chunk::Unknown(ref c) => c, [INFO] [stderr] 73 | | } [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] 58 | match *self { [INFO] [stderr] 59 | Chunk::Data(ref c) => c, [INFO] [stderr] 60 | Chunk::Init(ref c) => c, [INFO] [stderr] 61 | Chunk::InitAck(ref c) => c, [INFO] [stderr] 62 | Chunk::Sack(ref c) => c, [INFO] [stderr] 63 | Chunk::Heartbeat(ref c) => c, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/packet/chunk.rs:85:9 [INFO] [stderr] | [INFO] [stderr] 85 | / match self { [INFO] [stderr] 86 | | &Chunk::Data(ref c) => c.fmt(f), [INFO] [stderr] 87 | | &Chunk::Init(ref c) => c.fmt(f), [INFO] [stderr] 88 | | &Chunk::InitAck(ref c) => c.fmt(f), [INFO] [stderr] ... | [INFO] [stderr] 99 | | &Chunk::Unknown(ref c) => c.fmt(f), [INFO] [stderr] 100 | | } [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] 85 | match *self { [INFO] [stderr] 86 | Chunk::Data(ref c) => c.fmt(f), [INFO] [stderr] 87 | Chunk::Init(ref c) => c.fmt(f), [INFO] [stderr] 88 | Chunk::InitAck(ref c) => c.fmt(f), [INFO] [stderr] 89 | Chunk::Sack(ref c) => c.fmt(f), [INFO] [stderr] 90 | Chunk::Heartbeat(ref c) => c.fmt(f), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/packet/error_cause.rs:229:5 [INFO] [stderr] | [INFO] [stderr] 229 | / match error_cause { [INFO] [stderr] 230 | | &ErrorCause::InvalidStreamIdentifier(stream_id) => { [INFO] [stderr] 231 | | writer.open_tlv(INVALID_STREAM_IDENTIFIER_TYPE)?; [INFO] [stderr] 232 | | writer.write_be16(stream_id)?; [INFO] [stderr] ... | [INFO] [stderr] 304 | | } [INFO] [stderr] 305 | | }; [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] 229 | match *error_cause { [INFO] [stderr] 230 | ErrorCause::InvalidStreamIdentifier(stream_id) => { [INFO] [stderr] 231 | writer.open_tlv(INVALID_STREAM_IDENTIFIER_TYPE)?; [INFO] [stderr] 232 | writer.write_be16(stream_id)?; [INFO] [stderr] 233 | writer.write_be16(0)?; // reserved [INFO] [stderr] 234 | writer.close_tlv()?; [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/packet/parameter.rs:56:30 [INFO] [stderr] | [INFO] [stderr] 56 | pub fn from_bytes(bytes: &[u8; 4]) -> IPv4Address { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `[u8; 4]` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:58:21 [INFO] [stderr] | [INFO] [stderr] 58 | value: ((bytes[0] as u32) << 24) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(bytes[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:59:20 [INFO] [stderr] | [INFO] [stderr] 59 | | ((bytes[1] as u32) << 16) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(bytes[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:60:20 [INFO] [stderr] | [INFO] [stderr] 60 | | ((bytes[2] as u32) << 8) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(bytes[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `(bytes[3] as u32)` [INFO] [stderr] --> src/packet/parameter.rs:61:19 [INFO] [stderr] | [INFO] [stderr] 61 | | ((bytes[3] as u32) << 0), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:61:20 [INFO] [stderr] | [INFO] [stderr] 61 | | ((bytes[3] as u32) << 0), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(bytes[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `self.value` [INFO] [stderr] --> src/packet/parameter.rs:73:13 [INFO] [stderr] | [INFO] [stderr] 73 | (self.value >> 0) & 0xFF [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:97:13 [INFO] [stderr] | [INFO] [stderr] 97 | (self.value[0] as u16) << 8 | self.value[1] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:97:43 [INFO] [stderr] | [INFO] [stderr] 97 | (self.value[0] as u16) << 8 | self.value[1] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:98:13 [INFO] [stderr] | [INFO] [stderr] 98 | (self.value[2] as u16) << 8 | self.value[3] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:98:43 [INFO] [stderr] | [INFO] [stderr] 98 | (self.value[2] as u16) << 8 | self.value[3] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:99:13 [INFO] [stderr] | [INFO] [stderr] 99 | (self.value[4] as u16) << 8 | self.value[5] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[4])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:99:43 [INFO] [stderr] | [INFO] [stderr] 99 | (self.value[4] as u16) << 8 | self.value[5] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[5])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:100:13 [INFO] [stderr] | [INFO] [stderr] 100 | (self.value[6] as u16) << 8 | self.value[7] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[6])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:100:43 [INFO] [stderr] | [INFO] [stderr] 100 | (self.value[6] as u16) << 8 | self.value[7] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[7])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:101:13 [INFO] [stderr] | [INFO] [stderr] 101 | (self.value[8] as u16) << 8 | self.value[9] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[8])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:101:43 [INFO] [stderr] | [INFO] [stderr] 101 | (self.value[8] as u16) << 8 | self.value[9] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[9])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:102:13 [INFO] [stderr] | [INFO] [stderr] 102 | (self.value[10] as u16) << 8 | self.value[11] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[10])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:102:44 [INFO] [stderr] | [INFO] [stderr] 102 | (self.value[10] as u16) << 8 | self.value[11] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[11])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:103:13 [INFO] [stderr] | [INFO] [stderr] 103 | (self.value[12] as u16) << 8 | self.value[13] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[12])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:103:44 [INFO] [stderr] | [INFO] [stderr] 103 | (self.value[12] as u16) << 8 | self.value[13] as u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[13])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:104:13 [INFO] [stderr] | [INFO] [stderr] 104 | (self.value[14] as u16) << 8 | self.value[15] as u16 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[14])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/parameter.rs:104:44 [INFO] [stderr] | [INFO] [stderr] 104 | (self.value[14] as u16) << 8 | self.value[15] as u16 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.value[15])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/packet/parameter.rs:275:5 [INFO] [stderr] | [INFO] [stderr] 275 | / match parameter { [INFO] [stderr] 276 | | &Parameter::HeartbeatInfo(ref v) => { [INFO] [stderr] 277 | | writer.open_tlv(HEARTBEAT_INFO_TYPE)?; [INFO] [stderr] 278 | | writer.write_bytes(v)?; [INFO] [stderr] ... | [INFO] [stderr] 331 | | } [INFO] [stderr] 332 | | }; [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] 275 | match *parameter { [INFO] [stderr] 276 | Parameter::HeartbeatInfo(ref v) => { [INFO] [stderr] 277 | writer.open_tlv(HEARTBEAT_INFO_TYPE)?; [INFO] [stderr] 278 | writer.write_bytes(v)?; [INFO] [stderr] 279 | writer.close_tlv()?; [INFO] [stderr] 280 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/packet/writer.rs:19:9 [INFO] [stderr] | [INFO] [stderr] 19 | / match self { [INFO] [stderr] 20 | | &ErrorKind::MtuReached => write!(f, "MtuReached"), [INFO] [stderr] 21 | | } [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] 19 | match *self { [INFO] [stderr] 20 | ErrorKind::MtuReached => write!(f, "MtuReached"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/packet/writer.rs:45:26 [INFO] [stderr] | [INFO] [stderr] 45 | self.write_byte(((value >> 0) & 0xFF) as u8)?; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/packet/writer.rs:52:26 [INFO] [stderr] | [INFO] [stderr] 52 | self.write_byte(((value >> 0) & 0xFF) as u8)?; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/writer.rs:67:24 [INFO] [stderr] | [INFO] [stderr] 67 | self.open_tlv(((tag as u16) << 8) | (flags as u16)) [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `u16::from(tag)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/packet/writer.rs:67:45 [INFO] [stderr] | [INFO] [stderr] 67 | self.open_tlv(((tag as u16) << 8) | (flags as u16)) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u16::from(flags)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `length` [INFO] [stderr] --> src/packet/writer.rs:82:51 [INFO] [stderr] | [INFO] [stderr] 82 | self.write_byte_offset(length_index + 1, ((length >> 0) & 0xFF) as u8)?; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/packet/writer.rs:117:21 [INFO] [stderr] | [INFO] [stderr] 117 | pub fn to_owned(self) -> Vec { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/stack/association/retransmission.rs:123:50 [INFO] [stderr] | [INFO] [stderr] 123 | let ack_start = cumulative_tsn_ack + block.start as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `u32::from(block.start)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/stack/association/retransmission.rs:124:48 [INFO] [stderr] | [INFO] [stderr] 124 | let ack_end = cumulative_tsn_ack + block.end as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u32::from(block.end)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/stack/association/retransmission.rs:191:21 [INFO] [stderr] | [INFO] [stderr] 191 | let rtx_chunk = association.data.sent_queue.front().map(|c| c.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `association.data.sent_queue.front().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: Calling `subsec_micros()` is more concise than this calculation [INFO] [stderr] --> src/stack/association/retransmission.rs:374:53 [INFO] [stderr] | [INFO] [stderr] 374 | duration.as_secs() as u32 * 1_000_000 + duration.subsec_nanos() / 1_000 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `duration.subsec_micros()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::duration_subsec)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#duration_subsec [INFO] [stderr] [INFO] [stderr] warning: consider using `Option` instead of `Option>` or a custom enum if you need to distinguish all 3 cases [INFO] [stderr] --> src/stack/association/mod.rs:162:15 [INFO] [stderr] | [INFO] [stderr] 162 | do_close: Option>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_option)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_option [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (10/7) [INFO] [stderr] --> src/stack/association/mod.rs:251:5 [INFO] [stderr] | [INFO] [stderr] 251 | / fn instantiate( [INFO] [stderr] 252 | | state: AssociationState, [INFO] [stderr] 253 | | resources: StackResources, [INFO] [stderr] 254 | | network_state: NetworkState, [INFO] [stderr] ... | [INFO] [stderr] 291 | | } [INFO] [stderr] 292 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (10/7) [INFO] [stderr] --> src/stack/association/mod.rs:366:5 [INFO] [stderr] | [INFO] [stderr] 366 | / fn instantiate_connect( [INFO] [stderr] 367 | | local_port: u16, [INFO] [stderr] 368 | | sctp_peer: SocketAddr, [INFO] [stderr] 369 | | llp_peer: SocketAddr, [INFO] [stderr] ... | [INFO] [stderr] 402 | | ) [INFO] [stderr] 403 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/stack/association/mod.rs:674:29 [INFO] [stderr] | [INFO] [stderr] 674 | .filter_map(|x| match x { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 675 | | &Parameter::StateCookie(ref c) => Some(c), [INFO] [stderr] 676 | | _ => None, [INFO] [stderr] 677 | | }).next(); [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] 674 | .filter_map(|x| match *x { [INFO] [stderr] 675 | Parameter::StateCookie(ref c) => Some(c), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/stack/association/mod.rs:777:13 [INFO] [stderr] | [INFO] [stderr] 777 | / match chunk { [INFO] [stderr] 778 | | &mut Chunk::Init(_) => has_init = true, [INFO] [stderr] 779 | | &mut Chunk::CookieEcho(_) => has_cookie_echo = true, [INFO] [stderr] 780 | | &mut Chunk::ShutdownComplete(_) => _has_shutdown_complete = true, [INFO] [stderr] 781 | | &mut Chunk::Abort(_) => _has_abort = true, [INFO] [stderr] 782 | | _ => {} [INFO] [stderr] 783 | | } [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] 777 | match *chunk { [INFO] [stderr] 778 | Chunk::Init(_) => has_init = true, [INFO] [stderr] 779 | Chunk::CookieEcho(_) => has_cookie_echo = true, [INFO] [stderr] 780 | Chunk::ShutdownComplete(_) => _has_shutdown_complete = true, [INFO] [stderr] 781 | Chunk::Abort(_) => _has_abort = true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 46 [INFO] [stderr] --> src/stack/association/mod.rs:1354:5 [INFO] [stderr] | [INFO] [stderr] 1354 | / fn poll(&mut self) -> Poll, io::Error> { [INFO] [stderr] 1355 | | // Handle timeouts [INFO] [stderr] 1356 | | // TODO: This timer stuff is just begging to be refactored. [INFO] [stderr] 1357 | | [INFO] [stderr] ... | [INFO] [stderr] 1634 | | Ok(Async::NotReady) [INFO] [stderr] 1635 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [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/stack/association/mod.rs:1409:21 [INFO] [stderr] | [INFO] [stderr] 1409 | / match self.state { [INFO] [stderr] 1410 | | ShutdownSent => self.shutdown_abort(), [INFO] [stderr] 1411 | | _ => {} [INFO] [stderr] 1412 | | }; [INFO] [stderr] | |_____________________^ help: try this: `if let ShutdownSent = self.state { self.shutdown_abort() }` [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] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/stack/association/mod.rs:1554:28 [INFO] [stderr] | [INFO] [stderr] 1554 | if let Some(_) = self.do_close { [INFO] [stderr] | _____________________- ^^^^^^^ [INFO] [stderr] 1555 | | // Disallow concurrent aborts. [INFO] [stderr] 1556 | | // TODO: return an error via the tx [INFO] [stderr] 1557 | | return_tx.send(()).unwrap(); [INFO] [stderr] ... | [INFO] [stderr] 1573 | | self.do_close = Some(Some(return_tx)); [INFO] [stderr] 1574 | | } [INFO] [stderr] | |_____________________- help: try this: `if self.do_close.is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [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/stack/association/mod.rs:1617:9 [INFO] [stderr] | [INFO] [stderr] 1617 | / match self.outgoing_packets.pop_front() { [INFO] [stderr] 1618 | | Some(packet) => return Ok(Async::Ready(Some(packet))), [INFO] [stderr] 1619 | | None => {} [INFO] [stderr] 1620 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(packet) = self.outgoing_packets.pop_front() { return Ok(Async::Ready(Some(packet))) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `stack::cookie::Secret` [INFO] [stderr] --> src/stack/cookie.rs:48:5 [INFO] [stderr] | [INFO] [stderr] 48 | / pub fn new() -> Secret { [INFO] [stderr] 49 | | let mut key = [0u8; BLAKE2B_MAC_SIZE]; [INFO] [stderr] 50 | | let previous_key = [0u8; BLAKE2B_MAC_SIZE]; [INFO] [stderr] 51 | | rand::thread_rng().fill_bytes(&mut key); [INFO] [stderr] ... | [INFO] [stderr] 66 | | } [INFO] [stderr] 67 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 47 | impl Default for stack::cookie::Secret { [INFO] [stderr] 48 | fn default() -> Self { [INFO] [stderr] 49 | Self::new() [INFO] [stderr] 50 | } [INFO] [stderr] 51 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (10/7) [INFO] [stderr] --> src/stack/cookie.rs:158:5 [INFO] [stderr] | [INFO] [stderr] 158 | / pub fn new( [INFO] [stderr] 159 | | local_port: u16, [INFO] [stderr] 160 | | sctp_peer: SocketAddr, [INFO] [stderr] 161 | | llp_peer: SocketAddr, [INFO] [stderr] ... | [INFO] [stderr] 182 | | } [INFO] [stderr] 183 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: statement can be reduced [INFO] [stderr] --> src/stack/cookie.rs:242:9 [INFO] [stderr] | [INFO] [stderr] 242 | &mut serialization[0..BLAKE2B_MAC_SIZE].clone_from_slice(&mac); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `serialization[0..BLAKE2B_MAC_SIZE].clone_from_slice(&mac);` [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: the loop variable `i` is used to index `rendered` [INFO] [stderr] --> src/stack/lowerlayer.rs:36:14 [INFO] [stderr] | [INFO] [stderr] 36 | for i in 0..rendered.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 36 | for (i, ) in rendered.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/stack/lowerlayer.rs:36:14 [INFO] [stderr] | [INFO] [stderr] 36 | for i in 0..rendered.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try replacing the loop by: `llp_packet.buffer[..rendered.len()].clone_from_slice(&rendered[..])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `stack::queue::OrderedDataQueue` [INFO] [stderr] --> src/stack/queue.rs:118:5 [INFO] [stderr] | [INFO] [stderr] 118 | / pub fn new() -> OrderedDataQueue { [INFO] [stderr] 119 | | let heap = BinaryHeap::>::new(); [INFO] [stderr] 120 | | let list = LinkedList::::new(); [INFO] [stderr] 121 | | OrderedDataQueue { [INFO] [stderr] ... | [INFO] [stderr] 125 | | } [INFO] [stderr] 126 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 116 | impl Default for stack::queue::OrderedDataQueue { [INFO] [stderr] 117 | fn default() -> Self { [INFO] [stderr] 118 | Self::new() [INFO] [stderr] 119 | } [INFO] [stderr] 120 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/stack/queue.rs:155:9 [INFO] [stderr] | [INFO] [stderr] 155 | / loop { [INFO] [stderr] 156 | | let (heap_tsn, heap_ssn, heap_begin) = if let Some(c) = self.heap.peek() { [INFO] [stderr] 157 | | ((c.0).0.tsn, (c.0).0.ssn, (c.0).0.beginning_fragment) [INFO] [stderr] 158 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 175 | | } [INFO] [stderr] 176 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(c) = self.heap.peek() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/stack/queue.rs:235:13 [INFO] [stderr] | [INFO] [stderr] 235 | for ref c in &self.heap { [INFO] [stderr] | ^^^^^ ---------- help: try: `let c = &&self.heap;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `stack::queue::UnorderedDataQueue` [INFO] [stderr] --> src/stack/queue.rs:253:5 [INFO] [stderr] | [INFO] [stderr] 253 | / pub fn new() -> UnorderedDataQueue { [INFO] [stderr] 254 | | let tree = BTreeMap::::new(); [INFO] [stderr] 255 | | UnorderedDataQueue { tree } [INFO] [stderr] 256 | | } [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] 246 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/stack/queue.rs:334:27 [INFO] [stderr] | [INFO] [stderr] 334 | for (_, ref c) in &self.tree { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 334 | for ref c in self.tree.values() { [INFO] [stderr] | ^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `stack::queue::OutgoingDataQueue` [INFO] [stderr] --> src/stack/queue.rs:367:5 [INFO] [stderr] | [INFO] [stderr] 367 | / pub fn new() -> OutgoingDataQueue { [INFO] [stderr] 368 | | OutgoingDataQueue { [INFO] [stderr] 369 | | set: BTreeSet::new(), [INFO] [stderr] 370 | | tracker: BufferTracker::new(), [INFO] [stderr] 371 | | } [INFO] [stderr] 372 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 365 | impl Default for stack::queue::OutgoingDataQueue { [INFO] [stderr] 366 | fn default() -> Self { [INFO] [stderr] 367 | Self::new() [INFO] [stderr] 368 | } [INFO] [stderr] 369 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: equal expressions as operands to `==` [INFO] [stderr] --> src/stack/queue.rs:532:17 [INFO] [stderr] | [INFO] [stderr] 532 | assert!(data_chunk_1.tsn == data_chunk_1.tsn); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::eq_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#eq_op [INFO] [stderr] [INFO] [stderr] error: equal expressions as operands to `==` [INFO] [stderr] --> src/stack/queue.rs:533:17 [INFO] [stderr] | [INFO] [stderr] 533 | assert!(data_chunk_2.tsn == data_chunk_2.tsn); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#eq_op [INFO] [stderr] [INFO] [stderr] error: equal expressions as operands to `==` [INFO] [stderr] --> src/stack/queue.rs:545:17 [INFO] [stderr] | [INFO] [stderr] 545 | assert!(numbered_1 == numbered_1); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#eq_op [INFO] [stderr] [INFO] [stderr] error: equal expressions as operands to `==` [INFO] [stderr] --> src/stack/queue.rs:546:17 [INFO] [stderr] | [INFO] [stderr] 546 | assert!(numbered_2 == numbered_2); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#eq_op [INFO] [stderr] [INFO] [stderr] error: equal expressions as operands to `==` [INFO] [stderr] --> src/stack/queue.rs:558:17 [INFO] [stderr] | [INFO] [stderr] 558 | assert!(inverse_1 == inverse_1); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#eq_op [INFO] [stderr] [INFO] [stderr] error: equal expressions as operands to `==` [INFO] [stderr] --> src/stack/queue.rs:559:17 [INFO] [stderr] | [INFO] [stderr] 559 | assert!(inverse_2 == inverse_2); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#eq_op [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 35 [INFO] [stderr] --> src/stack/queue.rs:671:5 [INFO] [stderr] | [INFO] [stderr] 671 | / fn test_outgoing_data_queue() { [INFO] [stderr] 672 | | const CHUNK_COUNT: usize = 32768; [INFO] [stderr] 673 | | let TestData { [INFO] [stderr] 674 | | chunks, [INFO] [stderr] ... | [INFO] [stderr] 755 | | ); [INFO] [stderr] 756 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/stack/recvtracker.rs:57:17 [INFO] [stderr] | [INFO] [stderr] 57 | fn adjacent(&self, other: &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/stack/recvtracker.rs:57:31 [INFO] [stderr] | [INFO] [stderr] 57 | fn adjacent(&self, other: &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/stack/recvtracker.rs:60:16 [INFO] [stderr] | [INFO] [stderr] 60 | fn combine(&self, other: &Self) -> TSNRange { [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/stack/recvtracker.rs:60:30 [INFO] [stderr] | [INFO] [stderr] 60 | fn combine(&self, other: &Self) -> TSNRange { [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/stack/recvtracker.rs:195:45 [INFO] [stderr] | [INFO] [stderr] 195 | let max_gap = self.cumulative_tsn + ::std::u16::MAX as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(::std::u16::MAX)` [INFO] [stderr] | [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/stack/recvtracker.rs:279:37 [INFO] [stderr] | [INFO] [stderr] 279 | let duplicate = items[i].clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `items[i]` [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/stack/mod.rs:48:9 [INFO] [stderr] | [INFO] [stderr] 48 | / match self { [INFO] [stderr] 49 | | &Timeout::None => None, [INFO] [stderr] 50 | | &Timeout::Default => default.map(|d| timer.sleep(d)), [INFO] [stderr] 51 | | &Timeout::Some(duration) => Some(timer.sleep(duration)), [INFO] [stderr] 52 | | } [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] 48 | match *self { [INFO] [stderr] 49 | Timeout::None => None, [INFO] [stderr] 50 | Timeout::Default => default.map(|d| timer.sleep(d)), [INFO] [stderr] 51 | Timeout::Some(duration) => Some(timer.sleep(duration)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/stack/mod.rs:55:9 [INFO] [stderr] | [INFO] [stderr] 55 | / match self { [INFO] [stderr] 56 | | &Timeout::None => None, [INFO] [stderr] 57 | | &Timeout::Default => default, [INFO] [stderr] 58 | | &Timeout::Some(duration) => Some(duration), [INFO] [stderr] 59 | | } [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] 55 | match *self { [INFO] [stderr] 56 | Timeout::None => None, [INFO] [stderr] 57 | Timeout::Default => default, [INFO] [stderr] 58 | Timeout::Some(duration) => Some(duration), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/stack/mod.rs:212:5 [INFO] [stderr] | [INFO] [stderr] 212 | / fn lookup_association<'a>( [INFO] [stderr] 213 | | &'a mut self, [INFO] [stderr] 214 | | sctp_peer: SocketAddr, [INFO] [stderr] 215 | | local_port: u16, [INFO] [stderr] ... | [INFO] [stderr] 224 | | None [INFO] [stderr] 225 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/stack/mod.rs:238:5 [INFO] [stderr] | [INFO] [stderr] 238 | / fn lookup_listening_association<'a>( [INFO] [stderr] 239 | | &'a mut self, [INFO] [stderr] 240 | | local_port: u16, [INFO] [stderr] 241 | | ) -> Option<&'a mut Association> { [INFO] [stderr] ... | [INFO] [stderr] 252 | | None [INFO] [stderr] 253 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/stack/mod.rs:243:13 [INFO] [stderr] | [INFO] [stderr] 243 | / match association.state { [INFO] [stderr] 244 | | AssociationState::Listen => { [INFO] [stderr] 245 | | if association.network.local_port == local_port { [INFO] [stderr] 246 | | return Some(association); [INFO] [stderr] ... | [INFO] [stderr] 249 | | _ => {} [INFO] [stderr] 250 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 243 | if let AssociationState::Listen = association.state { [INFO] [stderr] 244 | if association.network.local_port == local_port { [INFO] [stderr] 245 | return Some(association); [INFO] [stderr] 246 | } [INFO] [stderr] 247 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/stack/mod.rs:268:13 [INFO] [stderr] | [INFO] [stderr] 268 | / packet [INFO] [stderr] 269 | | .sctp_packet [INFO] [stderr] 270 | | .chunks [INFO] [stderr] 271 | | .iter() [INFO] [stderr] ... | [INFO] [stderr] 274 | | _ => false, [INFO] [stderr] 275 | | }).is_some() [INFO] [stderr] | |____________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/stack/mod.rs:272:31 [INFO] [stderr] | [INFO] [stderr] 272 | .find(|chunk| match chunk { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 273 | | &&Chunk::CookieEcho(_) => true, [INFO] [stderr] 274 | | _ => false, [INFO] [stderr] 275 | | }).is_some() [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] 272 | .find(|chunk| match *chunk { [INFO] [stderr] 273 | &Chunk::CookieEcho(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/stack/mod.rs:293:49 [INFO] [stderr] | [INFO] [stderr] 293 | } else if is_cookie_echo_packet(packet) { [INFO] [stderr] | _________________________________________________^ [INFO] [stderr] 294 | | // Note that we try to send COOKIE ECHO packets to regular associations, before [INFO] [stderr] 295 | | // looking for listening associations. [INFO] [stderr] 296 | | if self.association_exists(sctp_peer, packet.sctp_packet.header.destination_port) { [INFO] [stderr] ... | [INFO] [stderr] 300 | | } [INFO] [stderr] 301 | | } else { [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/stack/mod.rs:285:35 [INFO] [stderr] | [INFO] [stderr] 285 | if is_init_packet(packet) { [INFO] [stderr] | ___________________________________^ [INFO] [stderr] 286 | | // Note that we try to send INIT packets to regular associations, before [INFO] [stderr] 287 | | // looking for listening associations. [INFO] [stderr] 288 | | if self.association_exists(sctp_peer, packet.sctp_packet.header.destination_port) { [INFO] [stderr] ... | [INFO] [stderr] 292 | | } [INFO] [stderr] 293 | | } else if is_cookie_echo_packet(packet) { [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: item `util::buffer::Buffer` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/util/buffer.rs:15:1 [INFO] [stderr] | [INFO] [stderr] 15 | / impl Buffer { [INFO] [stderr] 16 | | pub fn new(slice: &[u8]) -> Buffer { [INFO] [stderr] 17 | | Buffer { [INFO] [stderr] 18 | | data: Rc::new(slice.to_vec()), [INFO] [stderr] ... | [INFO] [stderr] 66 | | } [INFO] [stderr] 67 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/util/buffer.rs:61:19 [INFO] [stderr] | [INFO] [stderr] 61 | pub fn to_vec(self) -> Vec { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `util::buffer::BufferTracker` [INFO] [stderr] --> src/util/buffer.rs:110:5 [INFO] [stderr] | [INFO] [stderr] 110 | / pub fn new() -> BufferTracker { [INFO] [stderr] 111 | | BufferTracker { [INFO] [stderr] 112 | | inner: Rc::new(RefCell::new(Inner { count: 0, bytes: 0 })), [INFO] [stderr] 113 | | } [INFO] [stderr] 114 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 109 | impl Default for util::buffer::BufferTracker { [INFO] [stderr] 110 | fn default() -> Self { [INFO] [stderr] 111 | Self::new() [INFO] [stderr] 112 | } [INFO] [stderr] 113 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/util/tests.rs:251:21 [INFO] [stderr] | [INFO] [stderr] 251 | assert!(&message_buffer[..] == &m.buffer[..]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 251 | assert!(message_buffer[..] == m.buffer[..]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/util/mod.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: aborting due to 7 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `webrtc-sctp`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "df17fa361dc86af09ffa594d0d97bccc1bab81af08cfa9ede342a3cfacf5ff7b"` [INFO] running `"docker" "rm" "-f" "df17fa361dc86af09ffa594d0d97bccc1bab81af08cfa9ede342a3cfacf5ff7b"` [INFO] [stdout] df17fa361dc86af09ffa594d0d97bccc1bab81af08cfa9ede342a3cfacf5ff7b