[INFO] crate rusty_express 0.3.6 is already in cache [INFO] extracting crate rusty_express 0.3.6 into work/ex/clippy-test-run/sources/stable/reg/rusty_express/0.3.6 [INFO] extracting crate rusty_express 0.3.6 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/rusty_express/0.3.6 [INFO] validating manifest of rusty_express-0.3.6 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 rusty_express-0.3.6 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 rusty_express-0.3.6 [INFO] finished frobbing rusty_express-0.3.6 [INFO] frobbed toml for rusty_express-0.3.6 written to work/ex/clippy-test-run/sources/stable/reg/rusty_express/0.3.6/Cargo.toml [INFO] started frobbing rusty_express-0.3.6 [INFO] finished frobbing rusty_express-0.3.6 [INFO] frobbed toml for rusty_express-0.3.6 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/rusty_express/0.3.6/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 rusty_express-0.3.6 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/rusty_express/0.3.6:/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] 557b0662a860509fce09435525753d3e2b61d4f0b735a42fafa92b75a262e5a0 [INFO] running `"docker" "start" "-a" "557b0662a860509fce09435525753d3e2b61d4f0b735a42fafa92b75a262e5a0"` [INFO] [stderr] Checking crossbeam-epoch v0.6.1 [INFO] [stderr] Checking crossbeam-channel v0.2.6 [INFO] [stderr] Checking rusty_express v0.3.6 (/opt/crater/workdir) [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/core/connection.rs:111:5 [INFO] [stderr] | [INFO] [stderr] 111 | return write_to_stream(&stream, &mut build_err_response(err_code)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `write_to_stream(&stream, &mut build_err_response(err_code))` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/support/trie.rs:202:20 [INFO] [stderr] | [INFO] [stderr] 202 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 203 | | if let Some(callback) = RouteTrie::recursive_find(param_node, &segments[1..], params) { [INFO] [stderr] 204 | | return Some(callback); [INFO] [stderr] 205 | | } [INFO] [stderr] 206 | | } [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] 202 | } else if let Some(callback) = RouteTrie::recursive_find(param_node, &segments[1..], params) { [INFO] [stderr] 203 | return Some(callback); [INFO] [stderr] 204 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/support/session.rs:80:85 [INFO] [stderr] | [INFO] [stderr] 80 | static ref DEFAULT_LIFETIME: RwLock = RwLock::new(Duration::from_secs(172800)); [INFO] [stderr] | ^^^^^^ help: consider: `172_800` [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/support/session.rs:278:9 [INFO] [stderr] | [INFO] [stderr] 278 | return AUTO_CLEARN.load(atomic::Ordering::Release); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `AUTO_CLEARN.load(atomic::Ordering::Release)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/support/session.rs:575:5 [INFO] [stderr] | [INFO] [stderr] 575 | / return Some(Session { [INFO] [stderr] 576 | | id, [INFO] [stderr] 577 | | expires_at, [INFO] [stderr] 578 | | auto_renewal, [INFO] [stderr] 579 | | store, [INFO] [stderr] 580 | | is_dirty: false, [INFO] [stderr] 581 | | }); [INFO] [stderr] | |_______^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 575 | Some(Session { [INFO] [stderr] 576 | id, [INFO] [stderr] 577 | expires_at, [INFO] [stderr] 578 | auto_renewal, [INFO] [stderr] 579 | store, [INFO] [stderr] 580 | is_dirty: false, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/support/session.rs:591:39 [INFO] [stderr] | [INFO] [stderr] 591 | now.add(chrono::Duration::seconds(172800)) [INFO] [stderr] | ^^^^^^ help: consider: `172_800` [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/core/connection.rs:111:5 [INFO] [stderr] | [INFO] [stderr] 111 | return write_to_stream(&stream, &mut build_err_response(err_code)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `write_to_stream(&stream, &mut build_err_response(err_code))` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/support/trie.rs:202:20 [INFO] [stderr] | [INFO] [stderr] 202 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 203 | | if let Some(callback) = RouteTrie::recursive_find(param_node, &segments[1..], params) { [INFO] [stderr] 204 | | return Some(callback); [INFO] [stderr] 205 | | } [INFO] [stderr] 206 | | } [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] 202 | } else if let Some(callback) = RouteTrie::recursive_find(param_node, &segments[1..], params) { [INFO] [stderr] 203 | return Some(callback); [INFO] [stderr] 204 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/support/session.rs:80:85 [INFO] [stderr] | [INFO] [stderr] 80 | static ref DEFAULT_LIFETIME: RwLock = RwLock::new(Duration::from_secs(172800)); [INFO] [stderr] | ^^^^^^ help: consider: `172_800` [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/support/session.rs:278:9 [INFO] [stderr] | [INFO] [stderr] 278 | return AUTO_CLEARN.load(atomic::Ordering::Release); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `AUTO_CLEARN.load(atomic::Ordering::Release)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/support/session.rs:575:5 [INFO] [stderr] | [INFO] [stderr] 575 | / return Some(Session { [INFO] [stderr] 576 | | id, [INFO] [stderr] 577 | | expires_at, [INFO] [stderr] 578 | | auto_renewal, [INFO] [stderr] 579 | | store, [INFO] [stderr] 580 | | is_dirty: false, [INFO] [stderr] 581 | | }); [INFO] [stderr] | |_______^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 575 | Some(Session { [INFO] [stderr] 576 | id, [INFO] [stderr] 577 | expires_at, [INFO] [stderr] 578 | auto_renewal, [INFO] [stderr] 579 | store, [INFO] [stderr] 580 | is_dirty: false, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/support/session.rs:591:39 [INFO] [stderr] | [INFO] [stderr] 591 | now.add(chrono::Duration::seconds(172800)) [INFO] [stderr] | ^^^^^^ help: consider: `172_800` [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: you should consider deriving a `Default` implementation for `core::config::ServerConfig` [INFO] [stderr] --> src/core/config.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | / pub fn new() -> Self { [INFO] [stderr] 29 | | ServerConfig { [INFO] [stderr] 30 | | pool_size: cmp::max(num_cpus::get(), 4), [INFO] [stderr] 31 | | read_timeout: 256, [INFO] [stderr] ... | [INFO] [stderr] 35 | | } [INFO] [stderr] 36 | | } [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] 19 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/config.rs:84:9 [INFO] [stderr] | [INFO] [stderr] 84 | self.session_auto_clean_period.clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.session_auto_clean_period` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/config.rs:107:61 [INFO] [stderr] | [INFO] [stderr] 107 | store.status_page_generators.insert(status, generator.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `generator` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/config.rs:120:40 [INFO] [stderr] | [INFO] [stderr] 120 | session_auto_clean_period: self.session_auto_clean_period.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.session_auto_clean_period` [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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/config.rs:184:18 [INFO] [stderr] | [INFO] [stderr] 184 | content: &mut Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `&mut String` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/config.rs:245:41 [INFO] [stderr] | [INFO] [stderr] 245 | Some(generator) => Some(generator.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*generator` [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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/connection.rs:117:14 [INFO] [stderr] | [INFO] [stderr] 117 | request: &Box, [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/connection.rs:118:15 [INFO] [stderr] | [INFO] [stderr] 118 | response: &mut Box [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/connection.rs:143:50 [INFO] [stderr] | [INFO] [stderr] 143 | fn write_to_stream(stream: &TcpStream, response: &mut Box) -> ExecCode { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/connection.rs:190:14 [INFO] [stderr] | [INFO] [stderr] 190 | request: &mut Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `&mut Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/connection.rs:232:40 [INFO] [stderr] | [INFO] [stderr] 232 | fn deserialize(request: String, store: &mut Box) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `&mut Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/connection.rs:303:10 [INFO] [stderr] | [INFO] [stderr] 303 | req: &mut Box [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `&mut Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/core/connection.rs:304:6 [INFO] [stderr] | [INFO] [stderr] 304 | ) -> Option, HashMap)>> [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:399:51 [INFO] [stderr] | [INFO] [stderr] 399 | let mut uri_parts: Vec<&str> = uri.rsplitn(2, "/").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:402:42 [INFO] [stderr] | [INFO] [stderr] 402 | if let Some(pos) = uri_parts[0].find("#") { [INFO] [stderr] | ^^^ help: try using a char instead: `'#'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:412:42 [INFO] [stderr] | [INFO] [stderr] 412 | if let Some(pos) = uri_parts[0].find("?") { [INFO] [stderr] | ^^^ help: try using a char instead: `'?'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:425:41 [INFO] [stderr] | [INFO] [stderr] 425 | if uri_len > 1 && uri.ends_with("/") { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/core/connection.rs:442:16 [INFO] [stderr] | [INFO] [stderr] 442 | for set in cookie_body.trim().split(";").into_iter() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `cookie_body.trim().split(";")` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:442:41 [INFO] [stderr] | [INFO] [stderr] 442 | for set in cookie_body.trim().split(";").into_iter() { [INFO] [stderr] | ^^^ help: try using a char instead: `';'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:443:52 [INFO] [stderr] | [INFO] [stderr] 443 | let pair: Vec<&str> = set.trim().splitn(2, "=").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'='` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/core/connection.rs:446:19 [INFO] [stderr] | [INFO] [stderr] 446 | } else if pair.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!pair.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] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:454:45 [INFO] [stderr] | [INFO] [stderr] 454 | for (_, kv_pair) in scheme.trim().split("&").enumerate() { [INFO] [stderr] | ^^^ help: try using a char instead: `'&'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:455:57 [INFO] [stderr] | [INFO] [stderr] 455 | let store: Vec<&str> = kv_pair.trim().splitn(2, "=").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'='` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/core/connection.rs:457:12 [INFO] [stderr] | [INFO] [stderr] 457 | if store.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!store.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:13:31 [INFO] [stderr] | [INFO] [stderr] 13 | fn update(&mut self, req: &Box, resp: &mut Box) -> Result<(), &'static str>; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:13:52 [INFO] [stderr] | [INFO] [stderr] 13 | fn update(&mut self, req: &Box, resp: &mut Box) -> Result<(), &'static str>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:14:28 [INFO] [stderr] | [INFO] [stderr] 14 | fn process(&self, req: &Box, resp: &mut Box) -> Result<(), &'static str>; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:14:49 [INFO] [stderr] | [INFO] [stderr] 14 | fn process(&self, req: &Box, resp: &mut Box) -> Result<(), &'static str>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:23:28 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn update_context(req: &Box, resp: &mut Box) -> Result<(), &'static str> { [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:23:49 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn update_context(req: &Box, resp: &mut Box) -> Result<(), &'static str> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:32:10 [INFO] [stderr] | [INFO] [stderr] 32 | req: &Box, [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:33:11 [INFO] [stderr] | [INFO] [stderr] 33 | resp: &mut Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/cookie.rs:72:37 [INFO] [stderr] | [INFO] [stderr] 72 | if path.starts_with("/") { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/core/cookie.rs:141:9 [INFO] [stderr] | [INFO] [stderr] 141 | / match self.expires { [INFO] [stderr] 142 | | Some(time) => { [INFO] [stderr] 143 | | let dt = systemtime_to_utctime(time); [INFO] [stderr] 144 | | cookie.push_str(&format!( [INFO] [stderr] ... | [INFO] [stderr] 149 | | _ => { /* Nothing */ } [INFO] [stderr] 150 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 141 | if let Some(time) = self.expires { [INFO] [stderr] 142 | let dt = systemtime_to_utctime(time); [INFO] [stderr] 143 | cookie.push_str(&format!( [INFO] [stderr] 144 | " Expires={};", [INFO] [stderr] 145 | dt.format("%a, %e %b %Y %T GMT").to_string() [INFO] [stderr] 146 | )); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/cookie.rs:185:22 [INFO] [stderr] | [INFO] [stderr] 185 | expires: self.expires.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.expires` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/cookie.rs:186:22 [INFO] [stderr] | [INFO] [stderr] 186 | max_age: self.max_age.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.max_age` [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: you should consider adding a `Default` implementation for `core::http::Request` [INFO] [stderr] --> src/core/http.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | / pub fn new() -> Self { [INFO] [stderr] 46 | | Request { [INFO] [stderr] 47 | | method: REST::GET, [INFO] [stderr] 48 | | uri: String::new(), [INFO] [stderr] ... | [INFO] [stderr] 57 | | } [INFO] [stderr] 58 | | } [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] 44 | impl Default for core::http::Request { [INFO] [stderr] 45 | fn default() -> Self { [INFO] [stderr] 46 | Self::new() [INFO] [stderr] 47 | } [INFO] [stderr] 48 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/http.rs:127:9 [INFO] [stderr] | [INFO] [stderr] 127 | self.client_info.clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.client_info` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/http.rs:169:29 [INFO] [stderr] | [INFO] [stderr] 169 | if let Some(addr) = self.client_info.clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.client_info` [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: use of `or_insert` followed by a function call [INFO] [stderr] --> src/core/http.rs:226:43 [INFO] [stderr] | [INFO] [stderr] 226 | self.params.entry(key.to_owned()).or_insert(val.to_owned()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| val.to_owned())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/core/http.rs:266:15 [INFO] [stderr] | [INFO] [stderr] 266 | notifier: Option<(Arc>>, mpsc::Receiver>)>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/core/http.rs:267:17 [INFO] [stderr] | [INFO] [stderr] 267 | subscriber: Option<(mpsc::Sender>, Arc>>)>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `core::http::Response` [INFO] [stderr] --> src/core/http.rs:271:5 [INFO] [stderr] | [INFO] [stderr] 271 | / pub fn new() -> Self { [INFO] [stderr] 272 | | Response { [INFO] [stderr] 273 | | status: 0, [INFO] [stderr] 274 | | can_keep_alive: true, [INFO] [stderr] ... | [INFO] [stderr] 287 | | } [INFO] [stderr] 288 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 253 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/core/http.rs:298:56 [INFO] [stderr] | [INFO] [stderr] 298 | let receiver: Option> = match self.cookie.is_empty() { [INFO] [stderr] | ________________________________________________________^ [INFO] [stderr] 299 | | true => None, [INFO] [stderr] 300 | | false => { [INFO] [stderr] 301 | | let (tx, rx) = mpsc::channel(); [INFO] [stderr] ... | [INFO] [stderr] 312 | | } [INFO] [stderr] 313 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 298 | let receiver: Option> = if self.cookie.is_empty() { None } else { [INFO] [stderr] 299 | let (tx, rx) = mpsc::channel(); [INFO] [stderr] 300 | let cookie = Arc::clone(&self.cookie); [INFO] [stderr] 301 | [INFO] [stderr] 302 | shared_pool::run( [INFO] [stderr] 303 | move || { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/core/http.rs:328:9 [INFO] [stderr] | [INFO] [stderr] 328 | / if let &Some(ref length) = &self.content_length { [INFO] [stderr] 329 | | // explicit content length is set, use it here [INFO] [stderr] 330 | | header.push_str(&format!("Content-Length: {}\r\n", length)); [INFO] [stderr] 331 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 337 | | } [INFO] [stderr] 338 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 328 | if let Some(ref length) = self.content_length { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/core/http.rs:341:30 [INFO] [stderr] | [INFO] [stderr] 341 | let connection = match self.keep_alive { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 342 | | true if self.can_keep_alive => "keep-alive", [INFO] [stderr] 343 | | _ => "close", [INFO] [stderr] 344 | | }; [INFO] [stderr] | |_____________^ help: consider using an if/else expression: `if self.keep_alive { "keep-alive" } else { "close" }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/core/http.rs:384:10 [INFO] [stderr] | [INFO] [stderr] 384 | ) -> Result< [INFO] [stderr] | __________^ [INFO] [stderr] 385 | | ( [INFO] [stderr] 386 | | Arc>>, [INFO] [stderr] 387 | | Arc>>, [INFO] [stderr] 388 | | ), [INFO] [stderr] 389 | | &'static str, [INFO] [stderr] 390 | | >; [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/core/http.rs:441:10 [INFO] [stderr] | [INFO] [stderr] 441 | ) -> Result< [INFO] [stderr] | __________^ [INFO] [stderr] 442 | | ( [INFO] [stderr] 443 | | Arc>>, [INFO] [stderr] 444 | | Arc>>, [INFO] [stderr] 445 | | ), [INFO] [stderr] 446 | | &'static str, [INFO] [stderr] 447 | | > { [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/core/http.rs:628:13 [INFO] [stderr] | [INFO] [stderr] 628 | / if let &Some(ref tx) = &self.body_tx { [INFO] [stderr] 629 | | let tx_clone = mpsc::Sender::clone(tx); [INFO] [stderr] 630 | | shared_pool::run( [INFO] [stderr] 631 | | move || { [INFO] [stderr] ... | [INFO] [stderr] 635 | | ); [INFO] [stderr] 636 | | } [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] 628 | if let Some(ref tx) = self.body_tx { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: for loop over `notifier.1.recv_timeout(LONG_CONN_TIMEOUT)`, which is a `Result`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/core/http.rs:846:26 [INFO] [stderr] | [INFO] [stderr] 846 | for reply in notifier.1.recv_timeout(LONG_CONN_TIMEOUT) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::for_loop_over_result)] on by default [INFO] [stderr] = help: consider replacing `for reply in notifier.1.recv_timeout(LONG_CONN_TIMEOUT)` with `if let Ok(reply) = notifier.1.recv_timeout(LONG_CONN_TIMEOUT)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_result [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/http.rs:899:26 [INFO] [stderr] | [INFO] [stderr] 899 | fn stream_trunk(content: &Box, buffer: &mut BufWriter<&TcpStream>) { [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `&String` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/http.rs:943:40 [INFO] [stderr] | [INFO] [stderr] 943 | fn open_file(file_path: &PathBuf, buf: &mut Box) -> u16 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `&mut String` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/http.rs:1101:19 [INFO] [stderr] | [INFO] [stderr] 1101 | final_header: &mut Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `&mut String` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `core::router::Route` [INFO] [stderr] --> src/core/router.rs:289:5 [INFO] [stderr] | [INFO] [stderr] 289 | / pub fn new() -> Self { [INFO] [stderr] 290 | | Route { [INFO] [stderr] 291 | | store: Box::from(HashMap::new()), [INFO] [stderr] 292 | | auth_func: None, [INFO] [stderr] 293 | | } [INFO] [stderr] 294 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 283 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/router.rs:298:20 [INFO] [stderr] | [INFO] [stderr] 298 | return route.auth_func.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `route.auth_func` [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: you should consider deriving a `Default` implementation for `core::config::ServerConfig` [INFO] [stderr] --> src/core/config.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | / pub fn new() -> Self { [INFO] [stderr] 29 | | ServerConfig { [INFO] [stderr] 30 | | pool_size: cmp::max(num_cpus::get(), 4), [INFO] [stderr] 31 | | read_timeout: 256, [INFO] [stderr] ... | [INFO] [stderr] 35 | | } [INFO] [stderr] 36 | | } [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] 19 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/config.rs:84:9 [INFO] [stderr] | [INFO] [stderr] 84 | self.session_auto_clean_period.clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.session_auto_clean_period` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/router.rs:398:25 [INFO] [stderr] | [INFO] [stderr] 398 | self.other("*", uri.clone(), callback) [INFO] [stderr] | ^^^^^^^^^^^ help: try removing the `clone` call: `uri` [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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/router.rs:403:47 [INFO] [stderr] | [INFO] [stderr] 403 | fn parse_request(callback: Callback, req: &Box, resp: &mut Box); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/router.rs:403:68 [INFO] [stderr] | [INFO] [stderr] 403 | fn parse_request(callback: Callback, req: &Box, resp: &mut Box); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/config.rs:107:61 [INFO] [stderr] | [INFO] [stderr] 107 | store.status_page_generators.insert(status, generator.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `generator` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/config.rs:120:40 [INFO] [stderr] | [INFO] [stderr] 120 | session_auto_clean_period: self.session_auto_clean_period.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.session_auto_clean_period` [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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/config.rs:184:18 [INFO] [stderr] | [INFO] [stderr] 184 | content: &mut Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `&mut String` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/support/trie.rs:38:51 [INFO] [stderr] | [INFO] [stderr] 38 | } else if self.is_param != other.is_param { [INFO] [stderr] | ___________________________________________________^ [INFO] [stderr] 39 | | false [INFO] [stderr] 40 | | } else if self.validation.is_some() != other.validation.is_some() { [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/support/trie.rs:36:36 [INFO] [stderr] | [INFO] [stderr] 36 | if self.name != other.name { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 37 | | false [INFO] [stderr] 38 | | } else if self.is_param != other.is_param { [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: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/support/trie.rs:84:32 [INFO] [stderr] | [INFO] [stderr] 84 | if let Some(_) = child.callback { [INFO] [stderr] | _________________________- ^^^^^^^ [INFO] [stderr] 85 | | panic!("Key collision!"); [INFO] [stderr] 86 | | } [INFO] [stderr] | |_________________________- help: try this: `if child.callback.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: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/config.rs:245:41 [INFO] [stderr] | [INFO] [stderr] 245 | Some(generator) => Some(generator.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*generator` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/support/trie.rs:125:23 [INFO] [stderr] | [INFO] [stderr] 125 | callback: self.callback.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.callback` [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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/connection.rs:117:14 [INFO] [stderr] | [INFO] [stderr] 117 | request: &Box, [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/connection.rs:118:15 [INFO] [stderr] | [INFO] [stderr] 118 | response: &mut Box [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/connection.rs:143:50 [INFO] [stderr] | [INFO] [stderr] 143 | fn write_to_stream(stream: &TcpStream, response: &mut Box) -> ExecCode { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/connection.rs:190:14 [INFO] [stderr] | [INFO] [stderr] 190 | request: &mut Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `&mut Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/connection.rs:232:40 [INFO] [stderr] | [INFO] [stderr] 232 | fn deserialize(request: String, store: &mut Box) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `&mut Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/connection.rs:303:10 [INFO] [stderr] | [INFO] [stderr] 303 | req: &mut Box [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `&mut Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/core/connection.rs:304:6 [INFO] [stderr] | [INFO] [stderr] 304 | ) -> Option, HashMap)>> [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/support/scheduler.rs:150:28 [INFO] [stderr] | [INFO] [stderr] 150 | .map(|val| match val { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 151 | | &0 => 1, [INFO] [stderr] 152 | | _ => *val, [INFO] [stderr] 153 | | }) [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] 150 | .map(|val| match *val { [INFO] [stderr] 151 | 0 => 1, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: transmute from a type (`std::option::Option`) to itself [INFO] [stderr] --> src/support/scheduler.rs:169:20 [INFO] [stderr] | [INFO] [stderr] 169 | POOL = mem::transmute(pool); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_transmute)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_transmute [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:399:51 [INFO] [stderr] | [INFO] [stderr] 399 | let mut uri_parts: Vec<&str> = uri.rsplitn(2, "/").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:402:42 [INFO] [stderr] | [INFO] [stderr] 402 | if let Some(pos) = uri_parts[0].find("#") { [INFO] [stderr] | ^^^ help: try using a char instead: `'#'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:412:42 [INFO] [stderr] | [INFO] [stderr] 412 | if let Some(pos) = uri_parts[0].find("?") { [INFO] [stderr] | ^^^ help: try using a char instead: `'?'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:425:41 [INFO] [stderr] | [INFO] [stderr] 425 | if uri_len > 1 && uri.ends_with("/") { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/support/session.rs:140:25 [INFO] [stderr] | [INFO] [stderr] 140 | expires_at: self.expires_at.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.expires_at` [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: identical conversion [INFO] [stderr] --> src/core/connection.rs:442:16 [INFO] [stderr] | [INFO] [stderr] 442 | for set in cookie_body.trim().split(";").into_iter() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `cookie_body.trim().split(";")` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:442:41 [INFO] [stderr] | [INFO] [stderr] 442 | for set in cookie_body.trim().split(";").into_iter() { [INFO] [stderr] | ^^^ help: try using a char instead: `';'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:443:52 [INFO] [stderr] | [INFO] [stderr] 443 | let pair: Vec<&str> = set.trim().splitn(2, "=").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'='` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/core/connection.rs:446:19 [INFO] [stderr] | [INFO] [stderr] 446 | } else if pair.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!pair.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] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:454:45 [INFO] [stderr] | [INFO] [stderr] 454 | for (_, kv_pair) in scheme.trim().split("&").enumerate() { [INFO] [stderr] | ^^^ help: try using a char instead: `'&'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/core/connection.rs:455:57 [INFO] [stderr] | [INFO] [stderr] 455 | let store: Vec<&str> = kv_pair.trim().splitn(2, "=").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'='` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/core/connection.rs:457:12 [INFO] [stderr] | [INFO] [stderr] 457 | if store.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!store.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:13:31 [INFO] [stderr] | [INFO] [stderr] 13 | fn update(&mut self, req: &Box, resp: &mut Box) -> Result<(), &'static str>; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:13:52 [INFO] [stderr] | [INFO] [stderr] 13 | fn update(&mut self, req: &Box, resp: &mut Box) -> Result<(), &'static str>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:14:28 [INFO] [stderr] | [INFO] [stderr] 14 | fn process(&self, req: &Box, resp: &mut Box) -> Result<(), &'static str>; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:14:49 [INFO] [stderr] | [INFO] [stderr] 14 | fn process(&self, req: &Box, resp: &mut Box) -> Result<(), &'static str>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:23:28 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn update_context(req: &Box, resp: &mut Box) -> Result<(), &'static str> { [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:23:49 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn update_context(req: &Box, resp: &mut Box) -> Result<(), &'static str> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_err()` [INFO] [stderr] --> src/support/session.rs:431:28 [INFO] [stderr] | [INFO] [stderr] 431 | if let Err(_) = file.write(s.as_bytes()) { [INFO] [stderr] | _____________________- ^^^^^^ [INFO] [stderr] 432 | | continue; [INFO] [stderr] 433 | | } [INFO] [stderr] | |_____________________- help: try this: `if file.write(s.as_bytes()).is_err()` [INFO] [stderr] | [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 `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:32:10 [INFO] [stderr] | [INFO] [stderr] 32 | req: &Box, [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/context.rs:33:11 [INFO] [stderr] | [INFO] [stderr] 33 | resp: &mut Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/support/session.rs:544:26 [INFO] [stderr] | [INFO] [stderr] 544 | let mut expires_at = default_expires.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `default_expires` [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: single-character string constant used as pattern [INFO] [stderr] --> src/core/cookie.rs:72:37 [INFO] [stderr] | [INFO] [stderr] 72 | if path.starts_with("/") { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/core/cookie.rs:141:9 [INFO] [stderr] | [INFO] [stderr] 141 | / match self.expires { [INFO] [stderr] 142 | | Some(time) => { [INFO] [stderr] 143 | | let dt = systemtime_to_utctime(time); [INFO] [stderr] 144 | | cookie.push_str(&format!( [INFO] [stderr] ... | [INFO] [stderr] 149 | | _ => { /* Nothing */ } [INFO] [stderr] 150 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 141 | if let Some(time) = self.expires { [INFO] [stderr] 142 | let dt = systemtime_to_utctime(time); [INFO] [stderr] 143 | cookie.push_str(&format!( [INFO] [stderr] 144 | " Expires={};", [INFO] [stderr] 145 | dt.format("%a, %e %b %Y %T GMT").to_string() [INFO] [stderr] 146 | )); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/cookie.rs:185:22 [INFO] [stderr] | [INFO] [stderr] 185 | expires: self.expires.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.expires` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/support/logger.rs:202:31 [INFO] [stderr] | [INFO] [stderr] 202 | start_refresh(config.refresh_period.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `config.refresh_period` [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/cookie.rs:186:22 [INFO] [stderr] | [INFO] [stderr] 186 | max_age: self.max_age.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.max_age` [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] | [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 should consider adding a `Default` implementation for `core::http::Request` [INFO] [stderr] --> src/core/http.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | / pub fn new() -> Self { [INFO] [stderr] 46 | | Request { [INFO] [stderr] 47 | | method: REST::GET, [INFO] [stderr] 48 | | uri: String::new(), [INFO] [stderr] ... | [INFO] [stderr] 57 | | } [INFO] [stderr] 58 | | } [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] 44 | impl Default for core::http::Request { [INFO] [stderr] 45 | fn default() -> Self { [INFO] [stderr] 46 | Self::new() [INFO] [stderr] 47 | } [INFO] [stderr] 48 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/http.rs:127:9 [INFO] [stderr] | [INFO] [stderr] 127 | self.client_info.clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.client_info` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/http.rs:169:29 [INFO] [stderr] | [INFO] [stderr] 169 | if let Some(addr) = self.client_info.clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.client_info` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/support/common.rs:123:33 [INFO] [stderr] | [INFO] [stderr] 123 | fn json_format_content(content: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/core/http.rs:226:43 [INFO] [stderr] | [INFO] [stderr] 226 | self.params.entry(key.to_owned()).or_insert(val.to_owned()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| val.to_owned())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `content` [INFO] [stderr] --> src/support/common.rs:131:22 [INFO] [stderr] | [INFO] [stderr] 131 | for i in 0..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] 131 | for (i, ) in content.iter().enumerate().take(len) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/core/http.rs:266:15 [INFO] [stderr] | [INFO] [stderr] 266 | notifier: Option<(Arc>>, mpsc::Receiver>)>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/core/http.rs:267:17 [INFO] [stderr] | [INFO] [stderr] 267 | subscriber: Option<(mpsc::Sender>, Arc>>)>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `core::http::Response` [INFO] [stderr] --> src/core/http.rs:271:5 [INFO] [stderr] | [INFO] [stderr] 271 | / pub fn new() -> Self { [INFO] [stderr] 272 | | Response { [INFO] [stderr] 273 | | status: 0, [INFO] [stderr] 274 | | can_keep_alive: true, [INFO] [stderr] ... | [INFO] [stderr] 287 | | } [INFO] [stderr] 288 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 253 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/support/debug.rs:36:14 [INFO] [stderr] | [INFO] [stderr] 36 | _ => String::from(format!("error [{}]", level)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `format!("error [{}]", level)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `HttpServer` [INFO] [stderr] --> src/lib.rs:77:5 [INFO] [stderr] | [INFO] [stderr] 77 | / pub fn new() -> Self { [INFO] [stderr] 78 | | HttpServer { [INFO] [stderr] 79 | | router: Route::new(), [INFO] [stderr] 80 | | config: ServerConfig::new(), [INFO] [stderr] 81 | | state: ServerStates::new(), [INFO] [stderr] 82 | | } [INFO] [stderr] 83 | | } [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] 76 | impl Default for HttpServer { [INFO] [stderr] 77 | fn default() -> Self { [INFO] [stderr] 78 | Self::new() [INFO] [stderr] 79 | } [INFO] [stderr] 80 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u64 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:231:28 [INFO] [stderr] | [INFO] [stderr] 231 | let read_timeout = self.config.get_read_timeout() as u64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(self.config.get_read_timeout())` [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 u16 to u64 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:232:29 [INFO] [stderr] | [INFO] [stderr] 232 | let write_timeout = self.config.get_write_timeout() as u64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(self.config.get_write_timeout())` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:249:29 [INFO] [stderr] | [INFO] [stderr] 249 | fn setup_worker_pools(size: &usize) -> ThreadPool { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `usize` [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/core/http.rs:298:56 [INFO] [stderr] | [INFO] [stderr] 298 | let receiver: Option> = match self.cookie.is_empty() { [INFO] [stderr] | ________________________________________________________^ [INFO] [stderr] 299 | | true => None, [INFO] [stderr] 300 | | false => { [INFO] [stderr] 301 | | let (tx, rx) = mpsc::channel(); [INFO] [stderr] ... | [INFO] [stderr] 312 | | } [INFO] [stderr] 313 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 298 | let receiver: Option> = if self.cookie.is_empty() { None } else { [INFO] [stderr] 299 | let (tx, rx) = mpsc::channel(); [INFO] [stderr] 300 | let cookie = Arc::clone(&self.cookie); [INFO] [stderr] 301 | [INFO] [stderr] 302 | shared_pool::run( [INFO] [stderr] 303 | move || { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/core/http.rs:328:9 [INFO] [stderr] | [INFO] [stderr] 328 | / if let &Some(ref length) = &self.content_length { [INFO] [stderr] 329 | | // explicit content length is set, use it here [INFO] [stderr] 330 | | header.push_str(&format!("Content-Length: {}\r\n", length)); [INFO] [stderr] 331 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 337 | | } [INFO] [stderr] 338 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 328 | if let Some(ref length) = self.content_length { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/core/http.rs:341:30 [INFO] [stderr] | [INFO] [stderr] 341 | let connection = match self.keep_alive { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 342 | | true if self.can_keep_alive => "keep-alive", [INFO] [stderr] 343 | | _ => "close", [INFO] [stderr] 344 | | }; [INFO] [stderr] | |_____________^ help: consider using an if/else expression: `if self.keep_alive { "keep-alive" } else { "close" }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/core/http.rs:384:10 [INFO] [stderr] | [INFO] [stderr] 384 | ) -> Result< [INFO] [stderr] | __________^ [INFO] [stderr] 385 | | ( [INFO] [stderr] 386 | | Arc>>, [INFO] [stderr] 387 | | Arc>>, [INFO] [stderr] 388 | | ), [INFO] [stderr] 389 | | &'static str, [INFO] [stderr] 390 | | >; [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/core/http.rs:441:10 [INFO] [stderr] | [INFO] [stderr] 441 | ) -> Result< [INFO] [stderr] | __________^ [INFO] [stderr] 442 | | ( [INFO] [stderr] 443 | | Arc>>, [INFO] [stderr] 444 | | Arc>>, [INFO] [stderr] 445 | | ), [INFO] [stderr] 446 | | &'static str, [INFO] [stderr] 447 | | > { [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/core/http.rs:628:13 [INFO] [stderr] | [INFO] [stderr] 628 | / if let &Some(ref tx) = &self.body_tx { [INFO] [stderr] 629 | | let tx_clone = mpsc::Sender::clone(tx); [INFO] [stderr] 630 | | shared_pool::run( [INFO] [stderr] 631 | | move || { [INFO] [stderr] ... | [INFO] [stderr] 635 | | ); [INFO] [stderr] 636 | | } [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] 628 | if let Some(ref tx) = self.body_tx { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: for loop over `notifier.1.recv_timeout(LONG_CONN_TIMEOUT)`, which is a `Result`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/core/http.rs:846:26 [INFO] [stderr] | [INFO] [stderr] 846 | for reply in notifier.1.recv_timeout(LONG_CONN_TIMEOUT) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::for_loop_over_result)] on by default [INFO] [stderr] = help: consider replacing `for reply in notifier.1.recv_timeout(LONG_CONN_TIMEOUT)` with `if let Ok(reply) = notifier.1.recv_timeout(LONG_CONN_TIMEOUT)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_result [INFO] [stderr] [INFO] [stderr] error: Could not compile `rusty_express`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/http.rs:899:26 [INFO] [stderr] | [INFO] [stderr] 899 | fn stream_trunk(content: &Box, buffer: &mut BufWriter<&TcpStream>) { [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `&String` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/http.rs:943:40 [INFO] [stderr] | [INFO] [stderr] 943 | fn open_file(file_path: &PathBuf, buf: &mut Box) -> u16 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `&mut String` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/http.rs:1101:19 [INFO] [stderr] | [INFO] [stderr] 1101 | final_header: &mut Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `&mut String` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `core::router::Route` [INFO] [stderr] --> src/core/router.rs:289:5 [INFO] [stderr] | [INFO] [stderr] 289 | / pub fn new() -> Self { [INFO] [stderr] 290 | | Route { [INFO] [stderr] 291 | | store: Box::from(HashMap::new()), [INFO] [stderr] 292 | | auth_func: None, [INFO] [stderr] 293 | | } [INFO] [stderr] 294 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 283 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/router.rs:298:20 [INFO] [stderr] | [INFO] [stderr] 298 | return route.auth_func.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `route.auth_func` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/core/router.rs:398:25 [INFO] [stderr] | [INFO] [stderr] 398 | self.other("*", uri.clone(), callback) [INFO] [stderr] | ^^^^^^^^^^^ help: try removing the `clone` call: `uri` [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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/router.rs:403:47 [INFO] [stderr] | [INFO] [stderr] 403 | fn parse_request(callback: Callback, req: &Box, resp: &mut Box); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/core/router.rs:403:68 [INFO] [stderr] | [INFO] [stderr] 403 | fn parse_request(callback: Callback, req: &Box, resp: &mut Box); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut Response` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/support/trie.rs:38:51 [INFO] [stderr] | [INFO] [stderr] 38 | } else if self.is_param != other.is_param { [INFO] [stderr] | ___________________________________________________^ [INFO] [stderr] 39 | | false [INFO] [stderr] 40 | | } else if self.validation.is_some() != other.validation.is_some() { [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/support/trie.rs:36:36 [INFO] [stderr] | [INFO] [stderr] 36 | if self.name != other.name { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 37 | | false [INFO] [stderr] 38 | | } else if self.is_param != other.is_param { [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: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/support/trie.rs:84:32 [INFO] [stderr] | [INFO] [stderr] 84 | if let Some(_) = child.callback { [INFO] [stderr] | _________________________- ^^^^^^^ [INFO] [stderr] 85 | | panic!("Key collision!"); [INFO] [stderr] 86 | | } [INFO] [stderr] | |_________________________- help: try this: `if child.callback.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: using `clone` on a `Copy` type [INFO] [stderr] --> src/support/trie.rs:125:23 [INFO] [stderr] | [INFO] [stderr] 125 | callback: self.callback.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.callback` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/support/scheduler.rs:150:28 [INFO] [stderr] | [INFO] [stderr] 150 | .map(|val| match val { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 151 | | &0 => 1, [INFO] [stderr] 152 | | _ => *val, [INFO] [stderr] 153 | | }) [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] 150 | .map(|val| match *val { [INFO] [stderr] 151 | 0 => 1, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: transmute from a type (`std::option::Option`) to itself [INFO] [stderr] --> src/support/scheduler.rs:169:20 [INFO] [stderr] | [INFO] [stderr] 169 | POOL = mem::transmute(pool); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_transmute)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_transmute [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/support/session.rs:140:25 [INFO] [stderr] | [INFO] [stderr] 140 | expires_at: self.expires_at.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.expires_at` [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: redundant pattern matching, consider using `is_err()` [INFO] [stderr] --> src/support/session.rs:431:28 [INFO] [stderr] | [INFO] [stderr] 431 | if let Err(_) = file.write(s.as_bytes()) { [INFO] [stderr] | _____________________- ^^^^^^ [INFO] [stderr] 432 | | continue; [INFO] [stderr] 433 | | } [INFO] [stderr] | |_____________________- help: try this: `if file.write(s.as_bytes()).is_err()` [INFO] [stderr] | [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/support/session.rs:544:26 [INFO] [stderr] | [INFO] [stderr] 544 | let mut expires_at = default_expires.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `default_expires` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/support/logger.rs:202:31 [INFO] [stderr] | [INFO] [stderr] 202 | start_refresh(config.refresh_period.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `config.refresh_period` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/support/common.rs:123:33 [INFO] [stderr] | [INFO] [stderr] 123 | fn json_format_content(content: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `content` [INFO] [stderr] --> src/support/common.rs:131:22 [INFO] [stderr] | [INFO] [stderr] 131 | for i in 0..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] 131 | for (i, ) in content.iter().enumerate().take(len) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/support/debug.rs:36:14 [INFO] [stderr] | [INFO] [stderr] 36 | _ => String::from(format!("error [{}]", level)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `format!("error [{}]", level)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `HttpServer` [INFO] [stderr] --> src/lib.rs:77:5 [INFO] [stderr] | [INFO] [stderr] 77 | / pub fn new() -> Self { [INFO] [stderr] 78 | | HttpServer { [INFO] [stderr] 79 | | router: Route::new(), [INFO] [stderr] 80 | | config: ServerConfig::new(), [INFO] [stderr] 81 | | state: ServerStates::new(), [INFO] [stderr] 82 | | } [INFO] [stderr] 83 | | } [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] 76 | impl Default for HttpServer { [INFO] [stderr] 77 | fn default() -> Self { [INFO] [stderr] 78 | Self::new() [INFO] [stderr] 79 | } [INFO] [stderr] 80 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u64 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:231:28 [INFO] [stderr] | [INFO] [stderr] 231 | let read_timeout = self.config.get_read_timeout() as u64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(self.config.get_read_timeout())` [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 u16 to u64 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:232:29 [INFO] [stderr] | [INFO] [stderr] 232 | let write_timeout = self.config.get_write_timeout() as u64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(self.config.get_write_timeout())` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:249:29 [INFO] [stderr] | [INFO] [stderr] 249 | fn setup_worker_pools(size: &usize) -> ThreadPool { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `usize` [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] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `rusty_express`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "557b0662a860509fce09435525753d3e2b61d4f0b735a42fafa92b75a262e5a0"` [INFO] running `"docker" "rm" "-f" "557b0662a860509fce09435525753d3e2b61d4f0b735a42fafa92b75a262e5a0"` [INFO] [stdout] 557b0662a860509fce09435525753d3e2b61d4f0b735a42fafa92b75a262e5a0