[INFO] crate protocol-ftp-client 0.1.1 is already in cache [INFO] extracting crate protocol-ftp-client 0.1.1 into work/ex/clippy-test-run/sources/stable/reg/protocol-ftp-client/0.1.1 [INFO] extracting crate protocol-ftp-client 0.1.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/protocol-ftp-client/0.1.1 [INFO] validating manifest of protocol-ftp-client-0.1.1 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 protocol-ftp-client-0.1.1 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 protocol-ftp-client-0.1.1 [INFO] finished frobbing protocol-ftp-client-0.1.1 [INFO] frobbed toml for protocol-ftp-client-0.1.1 written to work/ex/clippy-test-run/sources/stable/reg/protocol-ftp-client/0.1.1/Cargo.toml [INFO] started frobbing protocol-ftp-client-0.1.1 [INFO] finished frobbing protocol-ftp-client-0.1.1 [INFO] frobbed toml for protocol-ftp-client-0.1.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/protocol-ftp-client/0.1.1/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 protocol-ftp-client-0.1.1 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/protocol-ftp-client/0.1.1:/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] 8f1710abd9de1acecb221a55ede6fae9a63a770c69b850efd873ac70d7a89ab2 [INFO] running `"docker" "start" "-a" "8f1710abd9de1acecb221a55ede6fae9a63a770c69b850efd873ac70d7a89ab2"` [INFO] [stderr] Checking protocol-ftp-client v0.1.1 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:375:29 [INFO] [stderr] | [INFO] [stderr] 375 | Ok(FtpTransmitter { internals: internals }) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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/lib.rs:446:23 [INFO] [stderr] | [INFO] [stderr] 446 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:476:23 [INFO] [stderr] | [INFO] [stderr] 476 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:497:23 [INFO] [stderr] | [INFO] [stderr] 497 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:535:23 [INFO] [stderr] | [INFO] [stderr] 535 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:565:23 [INFO] [stderr] | [INFO] [stderr] 565 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:595:23 [INFO] [stderr] | [INFO] [stderr] 595 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:625:23 [INFO] [stderr] | [INFO] [stderr] 625 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:656:23 [INFO] [stderr] | [INFO] [stderr] 656 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:686:25 [INFO] [stderr] | [INFO] [stderr] 686 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:721:19 [INFO] [stderr] | [INFO] [stderr] 721 | kind: kind, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `kind` [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:722:19 [INFO] [stderr] | [INFO] [stderr] 722 | size: size, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `size` [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:375:29 [INFO] [stderr] | [INFO] [stderr] 375 | Ok(FtpTransmitter { internals: internals }) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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/lib.rs:446:23 [INFO] [stderr] | [INFO] [stderr] 446 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:476:23 [INFO] [stderr] | [INFO] [stderr] 476 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:497:23 [INFO] [stderr] | [INFO] [stderr] 497 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:535:23 [INFO] [stderr] | [INFO] [stderr] 535 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:565:23 [INFO] [stderr] | [INFO] [stderr] 565 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:595:23 [INFO] [stderr] | [INFO] [stderr] 595 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:625:23 [INFO] [stderr] | [INFO] [stderr] 625 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:656:23 [INFO] [stderr] | [INFO] [stderr] 656 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:686:25 [INFO] [stderr] | [INFO] [stderr] 686 | FtpReceiver { internals: internals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `internals` [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:721:19 [INFO] [stderr] | [INFO] [stderr] 721 | kind: kind, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `kind` [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:722:19 [INFO] [stderr] | [INFO] [stderr] 722 | size: size, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `size` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:35:5 [INFO] [stderr] | [INFO] [stderr] 35 | / match self { [INFO] [stderr] 36 | | &DataMode::Binary => write!(f, "data-mode:binary"), [INFO] [stderr] 37 | | &DataMode::Text => write!(f, "data-mode:text"), [INFO] [stderr] 38 | | } [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] 35 | match *self { [INFO] [stderr] 36 | DataMode::Binary => write!(f, "data-mode:binary"), [INFO] [stderr] 37 | DataMode::Text => write!(f, "data-mode:text"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:75:5 [INFO] [stderr] | [INFO] [stderr] 75 | / match self { [INFO] [stderr] 76 | | &State::PathReceived(ref value) => write!(f, "[state: path-received({})]", value), [INFO] [stderr] 77 | | &State::CwdReqSent(ref value) => write!(f, "[state: cwd-req-sent({})]", value), [INFO] [stderr] 78 | | &State::DataTypeReqSent(ref value) => write!(f, "[state: data-type-req-sent({})]", value), [INFO] [stderr] ... | [INFO] [stderr] 101 | | } [INFO] [stderr] 102 | | } [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] 75 | match *self { [INFO] [stderr] 76 | State::PathReceived(ref value) => write!(f, "[state: path-received({})]", value), [INFO] [stderr] 77 | State::CwdReqSent(ref value) => write!(f, "[state: cwd-req-sent({})]", value), [INFO] [stderr] 78 | State::DataTypeReqSent(ref value) => write!(f, "[state: data-type-req-sent({})]", value), [INFO] [stderr] 79 | State::DataTypeConfirmed(ref value) => write!(f, "[state: data-type-confirmed({})]", value), [INFO] [stderr] 80 | State::SystemRecived(ref name, ref subtype) => write!(f, "[state: system-recieved({}/{})]", name, subtype), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:83:21 [INFO] [stderr] | [INFO] [stderr] 83 | let state = match self { [INFO] [stderr] | _____________________^ [INFO] [stderr] 84 | | &State::NonAuthorized => "non-authorized", [INFO] [stderr] 85 | | &State::Authorized => "authorized", [INFO] [stderr] 86 | | &State::LoginReady => "login-ready", [INFO] [stderr] ... | [INFO] [stderr] 98 | | _ => unreachable!(), [INFO] [stderr] 99 | | }; [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] 83 | let state = match *self { [INFO] [stderr] 84 | State::NonAuthorized => "non-authorized", [INFO] [stderr] 85 | State::Authorized => "authorized", [INFO] [stderr] 86 | State::LoginReady => "login-ready", [INFO] [stderr] 87 | State::LoginReqSent => "login-req-sent", [INFO] [stderr] 88 | State::PasswordExpected => "password-expected", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:138:5 [INFO] [stderr] | [INFO] [stderr] 138 | / match self { [INFO] [stderr] 139 | | &FtpError::NotEnoughData => { write!(f, "[no enough data]") } [INFO] [stderr] 140 | | &FtpError::AuthFailed => { write!(f, "[authorization failed]") } [INFO] [stderr] 141 | | &FtpError::GarbageData => { write!(f, "[garbage]") } [INFO] [stderr] 142 | | &FtpError::ProtocolError(ref s) => { write!(f, "[protocol error: {}]", s) } [INFO] [stderr] 143 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 138 | match *self { [INFO] [stderr] 139 | FtpError::NotEnoughData => { write!(f, "[no enough data]") } [INFO] [stderr] 140 | FtpError::AuthFailed => { write!(f, "[authorization failed]") } [INFO] [stderr] 141 | FtpError::GarbageData => { write!(f, "[garbage]") } [INFO] [stderr] 142 | FtpError::ProtocolError(ref s) => { write!(f, "[protocol error: {}]", s) } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:174:9 [INFO] [stderr] | [INFO] [stderr] 174 | / match self { [INFO] [stderr] 175 | | &FtpError::GarbageData => write!(f, "garbage data"), [INFO] [stderr] 176 | | &FtpError::NotEnoughData => write!(f, "no enough data"), [INFO] [stderr] 177 | | &FtpError::ProtocolError(ref err) => write!(f, "protocol error: {}", err), [INFO] [stderr] 178 | | &FtpError::AuthFailed => write!(f, "authentication failed"), [INFO] [stderr] 179 | | } [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] 174 | match *self { [INFO] [stderr] 175 | FtpError::GarbageData => write!(f, "garbage data"), [INFO] [stderr] 176 | FtpError::NotEnoughData => write!(f, "no enough data"), [INFO] [stderr] 177 | FtpError::ProtocolError(ref err) => write!(f, "protocol error: {}", err), [INFO] [stderr] 178 | FtpError::AuthFailed => write!(f, "authentication failed"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `FtpReceiver` [INFO] [stderr] --> src/lib.rs:184:3 [INFO] [stderr] | [INFO] [stderr] 184 | / pub fn new() -> Self { [INFO] [stderr] 185 | | FtpReceiver { [INFO] [stderr] 186 | | internals: Rc::new(FtpInternals { [INFO] [stderr] 187 | | error: None, [INFO] [stderr] ... | [INFO] [stderr] 195 | | } [INFO] [stderr] 196 | | } [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] 183 | impl Default for FtpReceiver { [INFO] [stderr] 184 | fn default() -> Self { [INFO] [stderr] 185 | Self::new() [INFO] [stderr] 186 | } [INFO] [stderr] 187 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:232:17 [INFO] [stderr] | [INFO] [stderr] 232 | / match &*prev_req { [INFO] [stderr] 233 | | &Some(ref prev_sent_req) => { [INFO] [stderr] 234 | | match &**prev_sent_req { [INFO] [stderr] 235 | | &State::DataTypeReqSent(ref value) => Ok(State::DataTypeConfirmed(value.clone())), [INFO] [stderr] ... | [INFO] [stderr] 239 | | _ => Err(FtpError::GarbageData), [INFO] [stderr] 240 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 232 | match *prev_req { [INFO] [stderr] 233 | Some(ref prev_sent_req) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:234:21 [INFO] [stderr] | [INFO] [stderr] 234 | / match &**prev_sent_req { [INFO] [stderr] 235 | | &State::DataTypeReqSent(ref value) => Ok(State::DataTypeConfirmed(value.clone())), [INFO] [stderr] 236 | | _ => Err(FtpError::GarbageData), [INFO] [stderr] 237 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 234 | match **prev_sent_req { [INFO] [stderr] 235 | State::DataTypeReqSent(ref value) => Ok(State::DataTypeConfirmed(value.clone())), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:278:33 [INFO] [stderr] | [INFO] [stderr] 278 | let p1_16 = p1 as u16; [INFO] [stderr] | ^^^^^^^^^ help: try: `u16::from(p1)` [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 u16 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:279:33 [INFO] [stderr] | [INFO] [stderr] 279 | let p2_16 = p2 as u16; [INFO] [stderr] | ^^^^^^^^^ help: try: `u16::from(p2)` [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: needlessly taken reference of both operands [INFO] [stderr] --> src/lib.rs:330:12 [INFO] [stderr] | [INFO] [stderr] 330 | if &e == &FtpError::AuthFailed { [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] 330 | if e == FtpError::AuthFailed { [INFO] [stderr] | ^ ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:360:37 [INFO] [stderr] | [INFO] [stderr] 360 | int_ref.working_dir = match &sent_request.unwrap().as_ref() { [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 361 | | &&State::CwdReqSent(ref path) => Some(path.clone()), [INFO] [stderr] 362 | | _ => { unreachable!() }, [INFO] [stderr] 363 | | }; [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: try [INFO] [stderr] | [INFO] [stderr] 360 | int_ref.working_dir = match sent_request.unwrap().as_ref() { [INFO] [stderr] 361 | &State::CwdReqSent(ref path) => Some(path.clone()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/lib.rs:389:25 [INFO] [stderr] | [INFO] [stderr] 389 | pub fn to_transmitter(self) -> FtpTransmitter { [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:397:48 [INFO] [stderr] | [INFO] [stderr] 397 | static ref DATA_USER: &'static [u8] = "USER ".as_bytes(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"USER "` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:398:48 [INFO] [stderr] | [INFO] [stderr] 398 | static ref DATA_PASS: &'static [u8] = "PASS ".as_bytes(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"PASS "` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:35:5 [INFO] [stderr] | [INFO] [stderr] 35 | / match self { [INFO] [stderr] 36 | | &DataMode::Binary => write!(f, "data-mode:binary"), [INFO] [stderr] 37 | | &DataMode::Text => write!(f, "data-mode:text"), [INFO] [stderr] 38 | | } [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] 35 | match *self { [INFO] [stderr] 36 | DataMode::Binary => write!(f, "data-mode:binary"), [INFO] [stderr] 37 | DataMode::Text => write!(f, "data-mode:text"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:406:48 [INFO] [stderr] | [INFO] [stderr] 406 | static ref DATA_CWD: &'static [u8] = "CWD ".as_bytes(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"CWD "` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:407:48 [INFO] [stderr] | [INFO] [stderr] 407 | static ref DATA_RETR: &'static [u8] = "RETR ".as_bytes(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"RETR "` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:75:5 [INFO] [stderr] | [INFO] [stderr] 75 | / match self { [INFO] [stderr] 76 | | &State::PathReceived(ref value) => write!(f, "[state: path-received({})]", value), [INFO] [stderr] 77 | | &State::CwdReqSent(ref value) => write!(f, "[state: cwd-req-sent({})]", value), [INFO] [stderr] 78 | | &State::DataTypeReqSent(ref value) => write!(f, "[state: data-type-req-sent({})]", value), [INFO] [stderr] ... | [INFO] [stderr] 101 | | } [INFO] [stderr] 102 | | } [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] 75 | match *self { [INFO] [stderr] 76 | State::PathReceived(ref value) => write!(f, "[state: path-received({})]", value), [INFO] [stderr] 77 | State::CwdReqSent(ref value) => write!(f, "[state: cwd-req-sent({})]", value), [INFO] [stderr] 78 | State::DataTypeReqSent(ref value) => write!(f, "[state: data-type-req-sent({})]", value), [INFO] [stderr] 79 | State::DataTypeConfirmed(ref value) => write!(f, "[state: data-type-confirmed({})]", value), [INFO] [stderr] 80 | State::SystemRecived(ref name, ref subtype) => write!(f, "[state: system-recieved({}/{})]", name, subtype), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/lib.rs:416:22 [INFO] [stderr] | [INFO] [stderr] 416 | pub fn to_receiver(self) -> FtpReceiver { [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:83:21 [INFO] [stderr] | [INFO] [stderr] 83 | let state = match self { [INFO] [stderr] | _____________________^ [INFO] [stderr] 84 | | &State::NonAuthorized => "non-authorized", [INFO] [stderr] 85 | | &State::Authorized => "authorized", [INFO] [stderr] 86 | | &State::LoginReady => "login-ready", [INFO] [stderr] ... | [INFO] [stderr] 98 | | _ => unreachable!(), [INFO] [stderr] 99 | | }; [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] 83 | let state = match *self { [INFO] [stderr] 84 | State::NonAuthorized => "non-authorized", [INFO] [stderr] 85 | State::Authorized => "authorized", [INFO] [stderr] 86 | State::LoginReady => "login-ready", [INFO] [stderr] 87 | State::LoginReqSent => "login-req-sent", [INFO] [stderr] 88 | State::PasswordExpected => "password-expected", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:426:5 [INFO] [stderr] | [INFO] [stderr] 426 | / match &*internals.state { [INFO] [stderr] 427 | | [INFO] [stderr] 428 | | &State::LoginReady => { [INFO] [stderr] 429 | | let data_login = login.as_bytes(); [INFO] [stderr] ... | [INFO] [stderr] 448 | | _ => panic!(format!("send_login is not allowed from the {}" , current_state)), [INFO] [stderr] 449 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 426 | match *internals.state { [INFO] [stderr] 427 | [INFO] [stderr] 428 | State::LoginReady => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:457:5 [INFO] [stderr] | [INFO] [stderr] 457 | / match &*internals.state { [INFO] [stderr] 458 | | &State::PasswordExpected => { [INFO] [stderr] 459 | | let data_password = pass.as_bytes(); [INFO] [stderr] 460 | | let mut my_count = 0; [INFO] [stderr] ... | [INFO] [stderr] 478 | | _ => panic!("send_password is not allowed from the current state"), [INFO] [stderr] 479 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 457 | match *internals.state { [INFO] [stderr] 458 | State::PasswordExpected => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:487:5 [INFO] [stderr] | [INFO] [stderr] 487 | / match &*internals.state { [INFO] [stderr] 488 | | &State::Authorized => { [INFO] [stderr] 489 | | unsafe { ptr::copy_nonoverlapping(&DATA_PWD[0], &mut buffer[0], DATA_PWD.len()); } [INFO] [stderr] 490 | | *count = DATA_PWD.len(); [INFO] [stderr] ... | [INFO] [stderr] 499 | | _ => panic!("send_pwd_req is not allowed from the current state"), [INFO] [stderr] 500 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 487 | match *internals.state { [INFO] [stderr] 488 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:138:5 [INFO] [stderr] | [INFO] [stderr] 138 | / match self { [INFO] [stderr] 139 | | &FtpError::NotEnoughData => { write!(f, "[no enough data]") } [INFO] [stderr] 140 | | &FtpError::AuthFailed => { write!(f, "[authorization failed]") } [INFO] [stderr] 141 | | &FtpError::GarbageData => { write!(f, "[garbage]") } [INFO] [stderr] 142 | | &FtpError::ProtocolError(ref s) => { write!(f, "[protocol error: {}]", s) } [INFO] [stderr] 143 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 138 | match *self { [INFO] [stderr] 139 | FtpError::NotEnoughData => { write!(f, "[no enough data]") } [INFO] [stderr] 140 | FtpError::AuthFailed => { write!(f, "[authorization failed]") } [INFO] [stderr] 141 | FtpError::GarbageData => { write!(f, "[garbage]") } [INFO] [stderr] 142 | FtpError::ProtocolError(ref s) => { write!(f, "[protocol error: {}]", s) } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:506:5 [INFO] [stderr] | [INFO] [stderr] 506 | / match &self.internals.working_dir { [INFO] [stderr] 507 | | &Some(ref path) => &path, [INFO] [stderr] 508 | | &None => panic!("get_wd is not available (did you called send_pwd_req?)"), [INFO] [stderr] 509 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 506 | match self.internals.working_dir { [INFO] [stderr] 507 | Some(ref path) => &path, [INFO] [stderr] 508 | None => panic!("get_wd is not available (did you called send_pwd_req?)"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:517:5 [INFO] [stderr] | [INFO] [stderr] 517 | / match &*internals.state { [INFO] [stderr] 518 | | &State::Authorized => { [INFO] [stderr] 519 | | match &data_type { [INFO] [stderr] 520 | | &DataMode::Binary => { [INFO] [stderr] ... | [INFO] [stderr] 537 | | _ => panic!("send_type_req is not allowed from the {}", internals.state), [INFO] [stderr] 538 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 517 | match *internals.state { [INFO] [stderr] 518 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:519:9 [INFO] [stderr] | [INFO] [stderr] 519 | / match &data_type { [INFO] [stderr] 520 | | &DataMode::Binary => { [INFO] [stderr] 521 | | unsafe { ptr::copy_nonoverlapping(&DATA_DATA_BINARY[0], &mut buffer[0], DATA_DATA_BINARY.len()); } [INFO] [stderr] 522 | | *count = DATA_DATA_BINARY.len(); [INFO] [stderr] ... | [INFO] [stderr] 527 | | } [INFO] [stderr] 528 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 519 | match data_type { [INFO] [stderr] 520 | DataMode::Binary => { [INFO] [stderr] 521 | unsafe { ptr::copy_nonoverlapping(&DATA_DATA_BINARY[0], &mut buffer[0], DATA_DATA_BINARY.len()); } [INFO] [stderr] 522 | *count = DATA_DATA_BINARY.len(); [INFO] [stderr] 523 | }, [INFO] [stderr] 524 | DataMode::Text => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:544:5 [INFO] [stderr] | [INFO] [stderr] 544 | / match &self.internals.data_mode { [INFO] [stderr] 545 | | &Some(ref mode) => &mode, [INFO] [stderr] 546 | | &None => panic!("get_type is not available (did you called send_type_req?)"), [INFO] [stderr] 547 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 544 | match self.internals.data_mode { [INFO] [stderr] 545 | Some(ref mode) => &mode, [INFO] [stderr] 546 | None => panic!("get_type is not available (did you called send_type_req?)"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:174:9 [INFO] [stderr] | [INFO] [stderr] 174 | / match self { [INFO] [stderr] 175 | | &FtpError::GarbageData => write!(f, "garbage data"), [INFO] [stderr] 176 | | &FtpError::NotEnoughData => write!(f, "no enough data"), [INFO] [stderr] 177 | | &FtpError::ProtocolError(ref err) => write!(f, "protocol error: {}", err), [INFO] [stderr] 178 | | &FtpError::AuthFailed => write!(f, "authentication failed"), [INFO] [stderr] 179 | | } [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] 174 | match *self { [INFO] [stderr] 175 | FtpError::GarbageData => write!(f, "garbage data"), [INFO] [stderr] 176 | FtpError::NotEnoughData => write!(f, "no enough data"), [INFO] [stderr] 177 | FtpError::ProtocolError(ref err) => write!(f, "protocol error: {}", err), [INFO] [stderr] 178 | FtpError::AuthFailed => write!(f, "authentication failed"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:555:5 [INFO] [stderr] | [INFO] [stderr] 555 | / match &*internals.state { [INFO] [stderr] 556 | | &State::Authorized => { [INFO] [stderr] 557 | | unsafe { ptr::copy_nonoverlapping(&DATA_SYST[0], &mut buffer[0], DATA_SYST.len()); } [INFO] [stderr] 558 | | *count = DATA_SYST.len(); [INFO] [stderr] ... | [INFO] [stderr] 567 | | _ => panic!("send_type_req is not allowed from the {}", internals.state), [INFO] [stderr] 568 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 555 | match *internals.state { [INFO] [stderr] 556 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `FtpReceiver` [INFO] [stderr] --> src/lib.rs:184:3 [INFO] [stderr] | [INFO] [stderr] 184 | / pub fn new() -> Self { [INFO] [stderr] 185 | | FtpReceiver { [INFO] [stderr] 186 | | internals: Rc::new(FtpInternals { [INFO] [stderr] 187 | | error: None, [INFO] [stderr] ... | [INFO] [stderr] 195 | | } [INFO] [stderr] 196 | | } [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] 183 | impl Default for FtpReceiver { [INFO] [stderr] 184 | fn default() -> Self { [INFO] [stderr] 185 | Self::new() [INFO] [stderr] 186 | } [INFO] [stderr] 187 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:574:5 [INFO] [stderr] | [INFO] [stderr] 574 | / match &self.internals.system { [INFO] [stderr] 575 | | &Some((ref name, ref subtype)) => (&name, &subtype), [INFO] [stderr] 576 | | &None => panic!("get_system is not available (did you called send_system_req?)"), [INFO] [stderr] 577 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 574 | match self.internals.system { [INFO] [stderr] 575 | Some((ref name, ref subtype)) => (&name, &subtype), [INFO] [stderr] 576 | None => panic!("get_system is not available (did you called send_system_req?)"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:585:5 [INFO] [stderr] | [INFO] [stderr] 585 | / match &*internals.state { [INFO] [stderr] 586 | | &State::Authorized => { [INFO] [stderr] 587 | | unsafe { ptr::copy_nonoverlapping(&DATA_PASV[0], &mut buffer[0], DATA_PASV.len()); } [INFO] [stderr] 588 | | *count = DATA_PASV.len(); [INFO] [stderr] ... | [INFO] [stderr] 597 | | _ => panic!("send_pasv_req is not allowed from the {}", internals.state), [INFO] [stderr] 598 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 585 | match *internals.state { [INFO] [stderr] 586 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:606:5 [INFO] [stderr] | [INFO] [stderr] 606 | / match &*internals.state { [INFO] [stderr] 607 | | &State::Authorized => { [INFO] [stderr] 608 | | let data_path = file_path.as_bytes(); [INFO] [stderr] 609 | | let mut my_count = 0; [INFO] [stderr] ... | [INFO] [stderr] 627 | | _ => panic!("send_get_req is not allowed from the {}", internals.state), [INFO] [stderr] 628 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 606 | match *internals.state { [INFO] [stderr] 607 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:637:5 [INFO] [stderr] | [INFO] [stderr] 637 | / match &*internals.state { [INFO] [stderr] 638 | | &State::Authorized => { [INFO] [stderr] 639 | | let data_path = path.as_bytes(); [INFO] [stderr] 640 | | let mut my_count = 0; [INFO] [stderr] ... | [INFO] [stderr] 658 | | _ => panic!("send_cwd_req is not allowed from the {}", internals.state), [INFO] [stderr] 659 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 637 | match *internals.state { [INFO] [stderr] 638 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:677:5 [INFO] [stderr] | [INFO] [stderr] 677 | / match &*internals.state { [INFO] [stderr] 678 | | &State::Authorized => { [INFO] [stderr] 679 | | unsafe { ptr::copy_nonoverlapping(&DATA_LIST[0], &mut buffer[0], DATA_LIST.len()); } [INFO] [stderr] 680 | | *count = DATA_LIST.len(); [INFO] [stderr] ... | [INFO] [stderr] 688 | | _ => panic!("send_pass_req is not allowed from the {}", internals.state), [INFO] [stderr] 689 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 677 | match *internals.state { [INFO] [stderr] 678 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:232:17 [INFO] [stderr] | [INFO] [stderr] 232 | / match &*prev_req { [INFO] [stderr] 233 | | &Some(ref prev_sent_req) => { [INFO] [stderr] 234 | | match &**prev_sent_req { [INFO] [stderr] 235 | | &State::DataTypeReqSent(ref value) => Ok(State::DataTypeConfirmed(value.clone())), [INFO] [stderr] ... | [INFO] [stderr] 239 | | _ => Err(FtpError::GarbageData), [INFO] [stderr] 240 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 232 | match *prev_req { [INFO] [stderr] 233 | Some(ref prev_sent_req) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:234:21 [INFO] [stderr] | [INFO] [stderr] 234 | / match &**prev_sent_req { [INFO] [stderr] 235 | | &State::DataTypeReqSent(ref value) => Ok(State::DataTypeConfirmed(value.clone())), [INFO] [stderr] 236 | | _ => Err(FtpError::GarbageData), [INFO] [stderr] 237 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 234 | match **prev_sent_req { [INFO] [stderr] 235 | State::DataTypeReqSent(ref value) => Ok(State::DataTypeConfirmed(value.clone())), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:278:33 [INFO] [stderr] | [INFO] [stderr] 278 | let p1_16 = p1 as u16; [INFO] [stderr] | ^^^^^^^^^ help: try: `u16::from(p1)` [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 u16 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:279:33 [INFO] [stderr] | [INFO] [stderr] 279 | let p2_16 = p2 as u16; [INFO] [stderr] | ^^^^^^^^^ help: try: `u16::from(p2)` [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: needlessly taken reference of both operands [INFO] [stderr] --> src/lib.rs:330:12 [INFO] [stderr] | [INFO] [stderr] 330 | if &e == &FtpError::AuthFailed { [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] 330 | if e == FtpError::AuthFailed { [INFO] [stderr] | ^ ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:360:37 [INFO] [stderr] | [INFO] [stderr] 360 | int_ref.working_dir = match &sent_request.unwrap().as_ref() { [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 361 | | &&State::CwdReqSent(ref path) => Some(path.clone()), [INFO] [stderr] 362 | | _ => { unreachable!() }, [INFO] [stderr] 363 | | }; [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: try [INFO] [stderr] | [INFO] [stderr] 360 | int_ref.working_dir = match sent_request.unwrap().as_ref() { [INFO] [stderr] 361 | &State::CwdReqSent(ref path) => Some(path.clone()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/lib.rs:389:25 [INFO] [stderr] | [INFO] [stderr] 389 | pub fn to_transmitter(self) -> FtpTransmitter { [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:397:48 [INFO] [stderr] | [INFO] [stderr] 397 | static ref DATA_USER: &'static [u8] = "USER ".as_bytes(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"USER "` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:398:48 [INFO] [stderr] | [INFO] [stderr] 398 | static ref DATA_PASS: &'static [u8] = "PASS ".as_bytes(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"PASS "` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:406:48 [INFO] [stderr] | [INFO] [stderr] 406 | static ref DATA_CWD: &'static [u8] = "CWD ".as_bytes(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"CWD "` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:407:48 [INFO] [stderr] | [INFO] [stderr] 407 | static ref DATA_RETR: &'static [u8] = "RETR ".as_bytes(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"RETR "` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/lib.rs:416:22 [INFO] [stderr] | [INFO] [stderr] 416 | pub fn to_receiver(self) -> FtpReceiver { [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 don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:426:5 [INFO] [stderr] | [INFO] [stderr] 426 | / match &*internals.state { [INFO] [stderr] 427 | | [INFO] [stderr] 428 | | &State::LoginReady => { [INFO] [stderr] 429 | | let data_login = login.as_bytes(); [INFO] [stderr] ... | [INFO] [stderr] 448 | | _ => panic!(format!("send_login is not allowed from the {}" , current_state)), [INFO] [stderr] 449 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 426 | match *internals.state { [INFO] [stderr] 427 | [INFO] [stderr] 428 | State::LoginReady => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:457:5 [INFO] [stderr] | [INFO] [stderr] 457 | / match &*internals.state { [INFO] [stderr] 458 | | &State::PasswordExpected => { [INFO] [stderr] 459 | | let data_password = pass.as_bytes(); [INFO] [stderr] 460 | | let mut my_count = 0; [INFO] [stderr] ... | [INFO] [stderr] 478 | | _ => panic!("send_password is not allowed from the current state"), [INFO] [stderr] 479 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 457 | match *internals.state { [INFO] [stderr] 458 | State::PasswordExpected => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:487:5 [INFO] [stderr] | [INFO] [stderr] 487 | / match &*internals.state { [INFO] [stderr] 488 | | &State::Authorized => { [INFO] [stderr] 489 | | unsafe { ptr::copy_nonoverlapping(&DATA_PWD[0], &mut buffer[0], DATA_PWD.len()); } [INFO] [stderr] 490 | | *count = DATA_PWD.len(); [INFO] [stderr] ... | [INFO] [stderr] 499 | | _ => panic!("send_pwd_req is not allowed from the current state"), [INFO] [stderr] 500 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 487 | match *internals.state { [INFO] [stderr] 488 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:506:5 [INFO] [stderr] | [INFO] [stderr] 506 | / match &self.internals.working_dir { [INFO] [stderr] 507 | | &Some(ref path) => &path, [INFO] [stderr] 508 | | &None => panic!("get_wd is not available (did you called send_pwd_req?)"), [INFO] [stderr] 509 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 506 | match self.internals.working_dir { [INFO] [stderr] 507 | Some(ref path) => &path, [INFO] [stderr] 508 | None => panic!("get_wd is not available (did you called send_pwd_req?)"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:517:5 [INFO] [stderr] | [INFO] [stderr] 517 | / match &*internals.state { [INFO] [stderr] 518 | | &State::Authorized => { [INFO] [stderr] 519 | | match &data_type { [INFO] [stderr] 520 | | &DataMode::Binary => { [INFO] [stderr] ... | [INFO] [stderr] 537 | | _ => panic!("send_type_req is not allowed from the {}", internals.state), [INFO] [stderr] 538 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 517 | match *internals.state { [INFO] [stderr] 518 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:519:9 [INFO] [stderr] | [INFO] [stderr] 519 | / match &data_type { [INFO] [stderr] 520 | | &DataMode::Binary => { [INFO] [stderr] 521 | | unsafe { ptr::copy_nonoverlapping(&DATA_DATA_BINARY[0], &mut buffer[0], DATA_DATA_BINARY.len()); } [INFO] [stderr] 522 | | *count = DATA_DATA_BINARY.len(); [INFO] [stderr] ... | [INFO] [stderr] 527 | | } [INFO] [stderr] 528 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 519 | match data_type { [INFO] [stderr] 520 | DataMode::Binary => { [INFO] [stderr] 521 | unsafe { ptr::copy_nonoverlapping(&DATA_DATA_BINARY[0], &mut buffer[0], DATA_DATA_BINARY.len()); } [INFO] [stderr] 522 | *count = DATA_DATA_BINARY.len(); [INFO] [stderr] 523 | }, [INFO] [stderr] 524 | DataMode::Text => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:544:5 [INFO] [stderr] | [INFO] [stderr] 544 | / match &self.internals.data_mode { [INFO] [stderr] 545 | | &Some(ref mode) => &mode, [INFO] [stderr] 546 | | &None => panic!("get_type is not available (did you called send_type_req?)"), [INFO] [stderr] 547 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 544 | match self.internals.data_mode { [INFO] [stderr] 545 | Some(ref mode) => &mode, [INFO] [stderr] 546 | None => panic!("get_type is not available (did you called send_type_req?)"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:555:5 [INFO] [stderr] | [INFO] [stderr] 555 | / match &*internals.state { [INFO] [stderr] 556 | | &State::Authorized => { [INFO] [stderr] 557 | | unsafe { ptr::copy_nonoverlapping(&DATA_SYST[0], &mut buffer[0], DATA_SYST.len()); } [INFO] [stderr] 558 | | *count = DATA_SYST.len(); [INFO] [stderr] ... | [INFO] [stderr] 567 | | _ => panic!("send_type_req is not allowed from the {}", internals.state), [INFO] [stderr] 568 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 555 | match *internals.state { [INFO] [stderr] 556 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:574:5 [INFO] [stderr] | [INFO] [stderr] 574 | / match &self.internals.system { [INFO] [stderr] 575 | | &Some((ref name, ref subtype)) => (&name, &subtype), [INFO] [stderr] 576 | | &None => panic!("get_system is not available (did you called send_system_req?)"), [INFO] [stderr] 577 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 574 | match self.internals.system { [INFO] [stderr] 575 | Some((ref name, ref subtype)) => (&name, &subtype), [INFO] [stderr] 576 | None => panic!("get_system is not available (did you called send_system_req?)"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:585:5 [INFO] [stderr] | [INFO] [stderr] 585 | / match &*internals.state { [INFO] [stderr] 586 | | &State::Authorized => { [INFO] [stderr] 587 | | unsafe { ptr::copy_nonoverlapping(&DATA_PASV[0], &mut buffer[0], DATA_PASV.len()); } [INFO] [stderr] 588 | | *count = DATA_PASV.len(); [INFO] [stderr] ... | [INFO] [stderr] 597 | | _ => panic!("send_pasv_req is not allowed from the {}", internals.state), [INFO] [stderr] 598 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 585 | match *internals.state { [INFO] [stderr] 586 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:606:5 [INFO] [stderr] | [INFO] [stderr] 606 | / match &*internals.state { [INFO] [stderr] 607 | | &State::Authorized => { [INFO] [stderr] 608 | | let data_path = file_path.as_bytes(); [INFO] [stderr] 609 | | let mut my_count = 0; [INFO] [stderr] ... | [INFO] [stderr] 627 | | _ => panic!("send_get_req is not allowed from the {}", internals.state), [INFO] [stderr] 628 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 606 | match *internals.state { [INFO] [stderr] 607 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:637:5 [INFO] [stderr] | [INFO] [stderr] 637 | / match &*internals.state { [INFO] [stderr] 638 | | &State::Authorized => { [INFO] [stderr] 639 | | let data_path = path.as_bytes(); [INFO] [stderr] 640 | | let mut my_count = 0; [INFO] [stderr] ... | [INFO] [stderr] 658 | | _ => panic!("send_cwd_req is not allowed from the {}", internals.state), [INFO] [stderr] 659 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 637 | match *internals.state { [INFO] [stderr] 638 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:677:5 [INFO] [stderr] | [INFO] [stderr] 677 | / match &*internals.state { [INFO] [stderr] 678 | | &State::Authorized => { [INFO] [stderr] 679 | | unsafe { ptr::copy_nonoverlapping(&DATA_LIST[0], &mut buffer[0], DATA_LIST.len()); } [INFO] [stderr] 680 | | *count = DATA_LIST.len(); [INFO] [stderr] ... | [INFO] [stderr] 688 | | _ => panic!("send_pass_req is not allowed from the {}", internals.state), [INFO] [stderr] 689 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 677 | match *internals.state { [INFO] [stderr] 678 | State::Authorized => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> examples/ftp-get.rs:134:3 [INFO] [stderr] | [INFO] [stderr] 134 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::str` [INFO] [stderr] --> tests/31-auth-fail.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use std::str; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::str` [INFO] [stderr] --> tests/10-feed-by-part.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use std::str; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> tests/10-feed-by-part.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | idx = idx + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `idx += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> examples/ftp-get.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | total_size = total_size + sz; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `total_size += sz` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: this creates an owned instance just for comparison [INFO] [stderr] --> examples/ftp-get.rs:55:24 [INFO] [stderr] | [INFO] [stderr] 55 | .take_while(|part| part.to_string() != filename.to_string()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `*part` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cmp_owned)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stderr] [INFO] [stderr] warning: this creates an owned instance just for comparison [INFO] [stderr] --> examples/ftp-get.rs:55:44 [INFO] [stderr] | [INFO] [stderr] 55 | .take_while(|part| part.to_string() != filename.to_string()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `filename` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> examples/ftp-get.rs:72:3 [INFO] [stderr] | [INFO] [stderr] 72 | let _ = stream.write_all(&tx_buff[0 .. tx_count]).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> examples/ftp-get.rs:79:3 [INFO] [stderr] | [INFO] [stderr] 79 | let _ = stream.write_all(&tx_buff[0 .. tx_count]).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> examples/ftp-get.rs:86:3 [INFO] [stderr] | [INFO] [stderr] 86 | let _ = stream.write_all(&tx_buff[0 .. tx_count]).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> examples/ftp-get.rs:89:29 [INFO] [stderr] | [INFO] [stderr] 89 | let (system, subtype) = transmitter.get_system().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `transmitter.get_system()` [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: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> examples/ftp-get.rs:94:3 [INFO] [stderr] | [INFO] [stderr] 94 | let _ = stream.write_all(&tx_buff[0 .. tx_count]).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> examples/ftp-get.rs:99:3 [INFO] [stderr] | [INFO] [stderr] 99 | let _ = stream.write_all(&tx_buff[0 .. tx_count]).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> examples/ftp-get.rs:104:3 [INFO] [stderr] | [INFO] [stderr] 104 | let _ = stream.write_all(&tx_buff[0 .. tx_count]).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> examples/ftp-get.rs:110:5 [INFO] [stderr] | [INFO] [stderr] 110 | let _ = stream.write_all(&tx_buff[0 .. tx_count]).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> examples/ftp-get.rs:112:24 [INFO] [stderr] | [INFO] [stderr] 112 | let (addr, port) = transmitter.take_endpoint().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `transmitter.take_endpoint()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> examples/ftp-get.rs:120:3 [INFO] [stderr] | [INFO] [stderr] 120 | let _ = stream.write_all(&tx_buff[0 .. tx_count]).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 5.94s [INFO] running `"docker" "inspect" "8f1710abd9de1acecb221a55ede6fae9a63a770c69b850efd873ac70d7a89ab2"` [INFO] running `"docker" "rm" "-f" "8f1710abd9de1acecb221a55ede6fae9a63a770c69b850efd873ac70d7a89ab2"` [INFO] [stdout] 8f1710abd9de1acecb221a55ede6fae9a63a770c69b850efd873ac70d7a89ab2