[INFO] updating cached repository reesmanp/hapi_rs [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/reesmanp/hapi_rs [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/reesmanp/hapi_rs" "work/ex/clippy-test-run/sources/stable/gh/reesmanp/hapi_rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/reesmanp/hapi_rs'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/reesmanp/hapi_rs" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/reesmanp/hapi_rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/reesmanp/hapi_rs'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] c9719f5b02f918deedde01e5ee457ba9037b315d [INFO] sha for GitHub repo reesmanp/hapi_rs: c9719f5b02f918deedde01e5ee457ba9037b315d [INFO] validating manifest of reesmanp/hapi_rs 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 reesmanp/hapi_rs 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 reesmanp/hapi_rs [INFO] finished frobbing reesmanp/hapi_rs [INFO] frobbed toml for reesmanp/hapi_rs written to work/ex/clippy-test-run/sources/stable/gh/reesmanp/hapi_rs/Cargo.toml [INFO] started frobbing reesmanp/hapi_rs [INFO] finished frobbing reesmanp/hapi_rs [INFO] frobbed toml for reesmanp/hapi_rs written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/reesmanp/hapi_rs/Cargo.toml [INFO] crate reesmanp/hapi_rs has a lockfile. skipping [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 reesmanp/hapi_rs against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/reesmanp/hapi_rs:/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] ce82739c572623fe21dc402224e1ddaa0c789c34370b9f759a0ad571d20b5d02 [INFO] running `"docker" "start" "-a" "ce82739c572623fe21dc402224e1ddaa0c789c34370b9f759a0ad571d20b5d02"` [INFO] [stderr] Compiling serde v1.0.77 [INFO] [stderr] Checking hapi_rs v0.2.0 (/opt/crater/workdir) [INFO] [stderr] warning: unused import: `super::thread_pool::job::FnBox` [INFO] [stderr] --> src/server/internals/route.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use super::thread_pool::job::FnBox; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `HTTPStatusCodes` [INFO] [stderr] --> src/server/internals/route.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | HTTPStatusCodes [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Request`, `Response` [INFO] [stderr] --> src/server/internals/thread_pool/job.rs:1:13 [INFO] [stderr] | [INFO] [stderr] 1 | use super::{Request, Response}; [INFO] [stderr] | ^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Job` [INFO] [stderr] --> src/server/internals/thread_pool/mod.rs:7:17 [INFO] [stderr] | [INFO] [stderr] 7 | use self::job::{Job, FnBox}; [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `thread_pool::job::FnBox` [INFO] [stderr] --> src/server/mod.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | thread_pool::job::FnBox [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::marker::Sync` [INFO] [stderr] --> src/server/mod.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | use std::marker::Sync; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::thread_pool::job::FnBox` [INFO] [stderr] --> src/server/internals/route.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use super::thread_pool::job::FnBox; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `HTTPStatusCodes` [INFO] [stderr] --> src/server/internals/route.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | HTTPStatusCodes [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Request`, `Response` [INFO] [stderr] --> src/server/internals/thread_pool/job.rs:1:13 [INFO] [stderr] | [INFO] [stderr] 1 | use super::{Request, Response}; [INFO] [stderr] | ^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Job` [INFO] [stderr] --> src/server/internals/thread_pool/mod.rs:7:17 [INFO] [stderr] | [INFO] [stderr] 7 | use self::job::{Job, FnBox}; [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `thread_pool::job::FnBox` [INFO] [stderr] --> src/server/mod.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | thread_pool::job::FnBox [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::marker::Sync` [INFO] [stderr] --> src/server/mod.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | use std::marker::Sync; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unreachable expression [INFO] [stderr] --> src/server/mod.rs:71:9 [INFO] [stderr] | [INFO] [stderr] 71 | Ok(String::from("OK")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable expression [INFO] [stderr] --> src/server/mod.rs:71:9 [INFO] [stderr] | [INFO] [stderr] 71 | Ok(String::from("OK")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/http/mod.rs:89:13 [INFO] [stderr] | [INFO] [stderr] 89 | HTTPMethod::PURGE => String::from("PURGE"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `T` [INFO] [stderr] --> src/server/internals/route.rs:48:26 [INFO] [stderr] | [INFO] [stderr] 48 | Some(T) => true [INFO] [stderr] | ^ help: consider using `_T` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `is_grabbing` is assigned to, but never used [INFO] [stderr] --> src/server/internals/route.rs:56:17 [INFO] [stderr] | [INFO] [stderr] 56 | let mut is_grabbing = false; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: consider using `_is_grabbing` instead [INFO] [stderr] [INFO] [stderr] warning: value assigned to `is_grabbing` is never read [INFO] [stderr] --> src/server/internals/route.rs:62:24 [INFO] [stderr] | [INFO] [stderr] 62 | "{" => is_grabbing = true, // TODO: grab variables [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: value assigned to `is_grabbing` is never read [INFO] [stderr] --> src/server/internals/route.rs:63:24 [INFO] [stderr] | [INFO] [stderr] 63 | "}" => is_grabbing = false, [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/http/mod.rs:89:13 [INFO] [stderr] | [INFO] [stderr] 89 | HTTPMethod::PURGE => String::from("PURGE"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `T` [INFO] [stderr] --> src/server/internals/route.rs:48:26 [INFO] [stderr] | [INFO] [stderr] 48 | Some(T) => true [INFO] [stderr] | ^ help: consider using `_T` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `is_grabbing` is assigned to, but never used [INFO] [stderr] --> src/server/internals/route.rs:56:17 [INFO] [stderr] | [INFO] [stderr] 56 | let mut is_grabbing = false; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: consider using `_is_grabbing` instead [INFO] [stderr] [INFO] [stderr] warning: value assigned to `is_grabbing` is never read [INFO] [stderr] --> src/server/internals/route.rs:62:24 [INFO] [stderr] | [INFO] [stderr] 62 | "{" => is_grabbing = true, // TODO: grab variables [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: value assigned to `is_grabbing` is never read [INFO] [stderr] --> src/server/internals/route.rs:63:24 [INFO] [stderr] | [INFO] [stderr] 63 | "}" => is_grabbing = false, [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `NewJob` [INFO] [stderr] --> src/server/internals/thread_pool/message.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | NewJob(Job), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/server/internals/options.rs:39:9 [INFO] [stderr] | [INFO] [stderr] 39 | self.default_http_version.clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.default_http_version` [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: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/server/internals/route.rs:43:27 [INFO] [stderr] | [INFO] [stderr] 43 | pub fn is_route_match(&mut self, method: HTTPMethod, path: String) -> bool { // TODO: Change from bool to Result to allow for a 405 to be sent if path matches but is not a correct method [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/server/internals/route.rs:44:9 [INFO] [stderr] | [INFO] [stderr] 44 | / match self.is_path_match(path) { [INFO] [stderr] 45 | | true => { [INFO] [stderr] 46 | | match self.method.iter().find(|&&verb| verb == method) { [INFO] [stderr] 47 | | None => false, [INFO] [stderr] ... | [INFO] [stderr] 51 | | false => false [INFO] [stderr] 52 | | } [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] 44 | if self.is_path_match(path) { [INFO] [stderr] 45 | match self.method.iter().find(|&&verb| verb == method) { [INFO] [stderr] 46 | None => false, [INFO] [stderr] 47 | Some(T) => true [INFO] [stderr] 48 | } [INFO] [stderr] 49 | } else { false } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/server/internals/route.rs:48:26 [INFO] [stderr] | [INFO] [stderr] 48 | Some(T) => true [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/server/internals/route.rs:75:9 [INFO] [stderr] | [INFO] [stderr] 75 | / if self.path == path_so_far { [INFO] [stderr] 76 | | true [INFO] [stderr] 77 | | } else { [INFO] [stderr] 78 | | false [INFO] [stderr] 79 | | } [INFO] [stderr] | |_________^ help: you can reduce it to: `self.path == path_so_far` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/server/internals/thread_pool/message.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | HandlerJob(Arc, Request, Response), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/server/internals/thread_pool/message.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | HandlerJob(Arc, Request, Response), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/server/internals/thread_pool/worker.rs:15:17 [INFO] [stderr] | [INFO] [stderr] 15 | / loop { [INFO] [stderr] 16 | | let unlocked = match receiver.lock() { [INFO] [stderr] 17 | | Ok(T) => T, [INFO] [stderr] 18 | | Err(_) => break [INFO] [stderr] ... | [INFO] [stderr] 47 | | } [INFO] [stderr] 48 | | } [INFO] [stderr] | |_________________^ help: try: `while let Ok(T) = receiver.lock() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/server/internals/thread_pool/worker.rs:17:28 [INFO] [stderr] | [INFO] [stderr] 17 | Ok(T) => T, [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/server/internals/thread_pool/worker.rs:62:13 [INFO] [stderr] | [INFO] [stderr] 62 | thread.join(); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/server/internals/thread_pool/mod.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | self.sender.send(Message::HandlerJob(handler, req, res)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/server/internals/thread_pool/mod.rs:51:13 [INFO] [stderr] | [INFO] [stderr] 51 | self.sender.send(Message::NewContinuousJob(cloned_job)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/server/internals/thread_pool/mod.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | self.sender.send(Message::Terminate); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing. [INFO] [stderr] --> src/server/internals/thread_pool/mod.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | drop(worker); [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::drop_ref)] on by default [INFO] [stderr] note: argument has type &mut server::internals::thread_pool::worker::Worker [INFO] [stderr] --> src/server/internals/thread_pool/mod.rs:69:18 [INFO] [stderr] | [INFO] [stderr] 69 | drop(worker); [INFO] [stderr] | ^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#drop_ref [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/server/mod.rs:55:28 [INFO] [stderr] | [INFO] [stderr] 55 | let http_version = self.default_http_version.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.default_http_version` [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: empty `loop {}` detected. You may want to either use `panic!()` or add `std::thread::sleep(..);` to the loop body. [INFO] [stderr] --> src/server/mod.rs:69:9 [INFO] [stderr] | [INFO] [stderr] 69 | loop {} [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::empty_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_loop [INFO] [stderr] [INFO] [stderr] error: handle read amount returned or use `Read::read_exact` instead [INFO] [stderr] --> src/server/mod.rs:90:5 [INFO] [stderr] | [INFO] [stderr] 90 | stream.read(&mut buffer).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/server/mod.rs:92:19 [INFO] [stderr] | [INFO] [stderr] 92 | let request = match buffer.len() != 0 { [INFO] [stderr] | ___________________^ [INFO] [stderr] 93 | | false => { [INFO] [stderr] 94 | | // Request has no content [INFO] [stderr] 95 | | // TODO: Allow user to override generic response with custom route [INFO] [stderr] ... | [INFO] [stderr] 102 | | } [INFO] [stderr] 103 | | }; [INFO] [stderr] | |_____^ [INFO] [stderr] | [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] 92 | let request = if buffer.len() != 0 { [INFO] [stderr] 93 | Request::parse_request(&buffer) [INFO] [stderr] 94 | } else { [INFO] [stderr] 95 | // Request has no content [INFO] [stderr] 96 | // TODO: Allow user to override generic response with custom route [INFO] [stderr] 97 | stream.write(HTTP::get_generic_response_string(HTTPStatusCodes::c400, http_version).as_ref()).unwrap(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/server/mod.rs:92:25 [INFO] [stderr] | [INFO] [stderr] 92 | let request = match buffer.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/server/mod.rs:96:13 [INFO] [stderr] | [INFO] [stderr] 96 | stream.write(HTTP::get_generic_response_string(HTTPStatusCodes::c400, http_version).as_ref()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/server/mod.rs:111:13 [INFO] [stderr] | [INFO] [stderr] 111 | stream.write(HTTP::get_generic_response_string(HTTPStatusCodes::c400, http_version).as_ref()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/server/mod.rs:124:17 [INFO] [stderr] | [INFO] [stderr] 124 | / match route.is_route_match(some_request.get_method(), some_request.get_path()) { [INFO] [stderr] 125 | | true => { [INFO] [stderr] 126 | | // Route exists [INFO] [stderr] 127 | | // Call route handler [INFO] [stderr] ... | [INFO] [stderr] 134 | | false => continue [INFO] [stderr] 135 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [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] 124 | if route.is_route_match(some_request.get_method(), some_request.get_path()) { [INFO] [stderr] 125 | // Route exists [INFO] [stderr] 126 | // Call route handler [INFO] [stderr] 127 | let handler_box = route.get_handler(); [INFO] [stderr] 128 | let mut response = Response::from_stream(stream); [INFO] [stderr] 129 | response.set_version(http_version); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/server/mod.rs:143:13 [INFO] [stderr] | [INFO] [stderr] 143 | stream.write(not_found_response.as_ref()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `http::header::Header` [INFO] [stderr] --> src/http/header.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | / pub fn new() -> Self { [INFO] [stderr] 10 | | Self { [INFO] [stderr] 11 | | values: HashMap::new() [INFO] [stderr] 12 | | } [INFO] [stderr] 13 | | } [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] 4 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/http/request/mod.rs:57:16 [INFO] [stderr] | [INFO] [stderr] 57 | Ok(T) => T [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/http/request/mod.rs:89:40 [INFO] [stderr] | [INFO] [stderr] 89 | Some(connection_header) => match connection_header.eq(&String::from("Upgrade")) { [INFO] [stderr] | ________________________________________^ [INFO] [stderr] 90 | | true => (), // TODO: implement upgrade [INFO] [stderr] 91 | | false => () [INFO] [stderr] 92 | | } [INFO] [stderr] | |_____________^ [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: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/http/request/mod.rs:99:22 [INFO] [stderr] | [INFO] [stderr] 99 | Some(T) => payload_vec.push(T) [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/http/request/mod.rs:116:45 [INFO] [stderr] | [INFO] [stderr] 116 | let mut split_buffer = buffer.split(" "); [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/http/request/mod.rs:121:18 [INFO] [stderr] | [INFO] [stderr] 121 | Some(T) => T [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/http/request/mod.rs:128:18 [INFO] [stderr] | [INFO] [stderr] 128 | Some(T) => T [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/http/request/mod.rs:135:18 [INFO] [stderr] | [INFO] [stderr] 135 | Some(T) => T [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/http/request/mod.rs:152:45 [INFO] [stderr] | [INFO] [stderr] 152 | let mut split_buffer = buffer.split("\n"); [INFO] [stderr] | ^^^^ help: try using a char instead: `'\n'` [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 match on a boolean expression [INFO] [stderr] --> src/http/response/mod.rs:73:9 [INFO] [stderr] | [INFO] [stderr] 73 | / match self.written { [INFO] [stderr] 74 | | false => format!( [INFO] [stderr] 75 | | "{} {} {}\r\n{}\r\n{}", [INFO] [stderr] 76 | | self.version.to_string(), [INFO] [stderr] ... | [INFO] [stderr] 82 | | true => format!("{}", body) [INFO] [stderr] 83 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 73 | if self.written { format!("{}", body) } else { format!( [INFO] [stderr] 74 | "{} {} {}\r\n{}\r\n{}", [INFO] [stderr] 75 | self.version.to_string(), [INFO] [stderr] 76 | self.code, [INFO] [stderr] 77 | self.reason, [INFO] [stderr] 78 | self.headers.get_headers_formatted(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/http/response/mod.rs:82:21 [INFO] [stderr] | [INFO] [stderr] 82 | true => format!("{}", body) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `body.to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [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/http/response/mod.rs:118:9 [INFO] [stderr] | [INFO] [stderr] 118 | / match self.stream { [INFO] [stderr] 119 | | Some(ref mut tcp) => { [INFO] [stderr] 120 | | tcp.write(response.as_ref()).unwrap(); [INFO] [stderr] 121 | | if flush { [INFO] [stderr] ... | [INFO] [stderr] 126 | | None => () [INFO] [stderr] 127 | | } [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] 118 | if let Some(ref mut tcp) = self.stream { [INFO] [stderr] 119 | tcp.write(response.as_ref()).unwrap(); [INFO] [stderr] 120 | if flush { [INFO] [stderr] 121 | tcp.flush().unwrap(); [INFO] [stderr] 122 | } [INFO] [stderr] 123 | self.written = true; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/http/response/mod.rs:120:17 [INFO] [stderr] | [INFO] [stderr] 120 | tcp.write(response.as_ref()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/http/mod.rs:55:5 [INFO] [stderr] | [INFO] [stderr] 55 | / pub fn from_str(buffer: &str) -> Self { [INFO] [stderr] 56 | | match buffer { [INFO] [stderr] 57 | | "GET" => HTTPMethod::GET, [INFO] [stderr] 58 | | "POST" => HTTPMethod::POST, [INFO] [stderr] ... | [INFO] [stderr] 73 | | } [INFO] [stderr] 74 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/http/mod.rs:76:22 [INFO] [stderr] | [INFO] [stderr] 76 | pub fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/http/mod.rs:117:5 [INFO] [stderr] | [INFO] [stderr] 117 | / pub fn from_str(buffer: &str) -> Self { [INFO] [stderr] 118 | | match buffer { [INFO] [stderr] 119 | | "HTTP/1.0" => HTTPVersion::HTTP10, [INFO] [stderr] 120 | | "HTTP/1.1" => HTTPVersion::HTTP11, [INFO] [stderr] ... | [INFO] [stderr] 123 | | } [INFO] [stderr] 124 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/http/mod.rs:126:22 [INFO] [stderr] | [INFO] [stderr] 126 | pub fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: variant `c100` should have a camel case name such as `C100` [INFO] [stderr] --> src/http/mod.rs:137:5 [INFO] [stderr] | [INFO] [stderr] 137 | c100, c101, [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_camel_case_types)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant `c101` should have a camel case name such as `C101` [INFO] [stderr] --> src/http/mod.rs:137:11 [INFO] [stderr] | [INFO] [stderr] 137 | c100, c101, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c200` should have a camel case name such as `C200` [INFO] [stderr] --> src/http/mod.rs:138:5 [INFO] [stderr] | [INFO] [stderr] 138 | c200, c201, c202, c203, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c201` should have a camel case name such as `C201` [INFO] [stderr] --> src/http/mod.rs:138:11 [INFO] [stderr] | [INFO] [stderr] 138 | c200, c201, c202, c203, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c202` should have a camel case name such as `C202` [INFO] [stderr] --> src/http/mod.rs:138:17 [INFO] [stderr] | [INFO] [stderr] 138 | c200, c201, c202, c203, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c203` should have a camel case name such as `C203` [INFO] [stderr] --> src/http/mod.rs:138:23 [INFO] [stderr] | [INFO] [stderr] 138 | c200, c201, c202, c203, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c204` should have a camel case name such as `C204` [INFO] [stderr] --> src/http/mod.rs:139:5 [INFO] [stderr] | [INFO] [stderr] 139 | c204, c205, c206, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c205` should have a camel case name such as `C205` [INFO] [stderr] --> src/http/mod.rs:139:11 [INFO] [stderr] | [INFO] [stderr] 139 | c204, c205, c206, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c206` should have a camel case name such as `C206` [INFO] [stderr] --> src/http/mod.rs:139:17 [INFO] [stderr] | [INFO] [stderr] 139 | c204, c205, c206, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c300` should have a camel case name such as `C300` [INFO] [stderr] --> src/http/mod.rs:140:5 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c301` should have a camel case name such as `C301` [INFO] [stderr] --> src/http/mod.rs:140:11 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c302` should have a camel case name such as `C302` [INFO] [stderr] --> src/http/mod.rs:140:17 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c303` should have a camel case name such as `C303` [INFO] [stderr] --> src/http/mod.rs:140:23 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c304` should have a camel case name such as `C304` [INFO] [stderr] --> src/http/mod.rs:140:29 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c305` should have a camel case name such as `C305` [INFO] [stderr] --> src/http/mod.rs:140:35 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c306` should have a camel case name such as `C306` [INFO] [stderr] --> src/http/mod.rs:140:41 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c307` should have a camel case name such as `C307` [INFO] [stderr] --> src/http/mod.rs:140:47 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c400` should have a camel case name such as `C400` [INFO] [stderr] --> src/http/mod.rs:141:5 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c401` should have a camel case name such as `C401` [INFO] [stderr] --> src/http/mod.rs:141:11 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c402` should have a camel case name such as `C402` [INFO] [stderr] --> src/http/mod.rs:141:17 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c403` should have a camel case name such as `C403` [INFO] [stderr] --> src/http/mod.rs:141:23 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c404` should have a camel case name such as `C404` [INFO] [stderr] --> src/http/mod.rs:141:29 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c405` should have a camel case name such as `C405` [INFO] [stderr] --> src/http/mod.rs:141:35 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c406` should have a camel case name such as `C406` [INFO] [stderr] --> src/http/mod.rs:141:41 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c407` should have a camel case name such as `C407` [INFO] [stderr] --> src/http/mod.rs:141:47 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c408` should have a camel case name such as `C408` [INFO] [stderr] --> src/http/mod.rs:141:53 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c409` should have a camel case name such as `C409` [INFO] [stderr] --> src/http/mod.rs:141:59 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c410` should have a camel case name such as `C410` [INFO] [stderr] --> src/http/mod.rs:141:65 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c411` should have a camel case name such as `C411` [INFO] [stderr] --> src/http/mod.rs:141:71 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c412` should have a camel case name such as `C412` [INFO] [stderr] --> src/http/mod.rs:141:77 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c413` should have a camel case name such as `C413` [INFO] [stderr] --> src/http/mod.rs:141:83 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c414` should have a camel case name such as `C414` [INFO] [stderr] --> src/http/mod.rs:141:89 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c415` should have a camel case name such as `C415` [INFO] [stderr] --> src/http/mod.rs:141:95 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c416` should have a camel case name such as `C416` [INFO] [stderr] --> src/http/mod.rs:141:101 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c417` should have a camel case name such as `C417` [INFO] [stderr] --> src/http/mod.rs:141:107 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c418` should have a camel case name such as `C418` [INFO] [stderr] --> src/http/mod.rs:141:113 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c500` should have a camel case name such as `C500` [INFO] [stderr] --> src/http/mod.rs:142:5 [INFO] [stderr] | [INFO] [stderr] 142 | c500, c501, c502, c503, c504, c505 [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c501` should have a camel case name such as `C501` [INFO] [stderr] --> src/http/mod.rs:142:11 [INFO] [stderr] | [INFO] [stderr] 142 | c500, c501, c502, c503, c504, c505 [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c502` should have a camel case name such as `C502` [INFO] [stderr] --> src/http/mod.rs:142:17 [INFO] [stderr] | [INFO] [stderr] 142 | c500, c501, c502, c503, c504, c505 [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c503` should have a camel case name such as `C503` [INFO] [stderr] --> src/http/mod.rs:142:23 [INFO] [stderr] | [INFO] [stderr] 142 | c500, c501, c502, c503, c504, c505 [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c504` should have a camel case name such as `C504` [INFO] [stderr] --> src/http/mod.rs:142:29 [INFO] [stderr] | [INFO] [stderr] 142 | c500, c501, c502, c503, c504, c505 [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c505` should have a camel case name such as `C505` [INFO] [stderr] --> src/http/mod.rs:142:35 [INFO] [stderr] | [INFO] [stderr] 142 | c500, c501, c502, c503, c504, c505 [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] error: aborting due to 6 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `hapi_rs`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: variant is never constructed: `NewJob` [INFO] [stderr] --> src/server/internals/thread_pool/message.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | NewJob(Job), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/server/internals/options.rs:39:9 [INFO] [stderr] | [INFO] [stderr] 39 | self.default_http_version.clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.default_http_version` [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: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/server/internals/route.rs:43:27 [INFO] [stderr] | [INFO] [stderr] 43 | pub fn is_route_match(&mut self, method: HTTPMethod, path: String) -> bool { // TODO: Change from bool to Result to allow for a 405 to be sent if path matches but is not a correct method [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/server/internals/route.rs:44:9 [INFO] [stderr] | [INFO] [stderr] 44 | / match self.is_path_match(path) { [INFO] [stderr] 45 | | true => { [INFO] [stderr] 46 | | match self.method.iter().find(|&&verb| verb == method) { [INFO] [stderr] 47 | | None => false, [INFO] [stderr] ... | [INFO] [stderr] 51 | | false => false [INFO] [stderr] 52 | | } [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] 44 | if self.is_path_match(path) { [INFO] [stderr] 45 | match self.method.iter().find(|&&verb| verb == method) { [INFO] [stderr] 46 | None => false, [INFO] [stderr] 47 | Some(T) => true [INFO] [stderr] 48 | } [INFO] [stderr] 49 | } else { false } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/server/internals/route.rs:48:26 [INFO] [stderr] | [INFO] [stderr] 48 | Some(T) => true [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/server/internals/route.rs:75:9 [INFO] [stderr] | [INFO] [stderr] 75 | / if self.path == path_so_far { [INFO] [stderr] 76 | | true [INFO] [stderr] 77 | | } else { [INFO] [stderr] 78 | | false [INFO] [stderr] 79 | | } [INFO] [stderr] | |_________^ help: you can reduce it to: `self.path == path_so_far` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/server/internals/thread_pool/message.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | HandlerJob(Arc, Request, Response), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/server/internals/thread_pool/message.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | HandlerJob(Arc, Request, Response), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/server/internals/thread_pool/worker.rs:15:17 [INFO] [stderr] | [INFO] [stderr] 15 | / loop { [INFO] [stderr] 16 | | let unlocked = match receiver.lock() { [INFO] [stderr] 17 | | Ok(T) => T, [INFO] [stderr] 18 | | Err(_) => break [INFO] [stderr] ... | [INFO] [stderr] 47 | | } [INFO] [stderr] 48 | | } [INFO] [stderr] | |_________________^ help: try: `while let Ok(T) = receiver.lock() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/server/internals/thread_pool/worker.rs:17:28 [INFO] [stderr] | [INFO] [stderr] 17 | Ok(T) => T, [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/server/internals/thread_pool/worker.rs:62:13 [INFO] [stderr] | [INFO] [stderr] 62 | thread.join(); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/server/internals/thread_pool/mod.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | self.sender.send(Message::HandlerJob(handler, req, res)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/server/internals/thread_pool/mod.rs:51:13 [INFO] [stderr] | [INFO] [stderr] 51 | self.sender.send(Message::NewContinuousJob(cloned_job)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/server/internals/thread_pool/mod.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | self.sender.send(Message::Terminate); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing. [INFO] [stderr] --> src/server/internals/thread_pool/mod.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | drop(worker); [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::drop_ref)] on by default [INFO] [stderr] note: argument has type &mut server::internals::thread_pool::worker::Worker [INFO] [stderr] --> src/server/internals/thread_pool/mod.rs:69:18 [INFO] [stderr] | [INFO] [stderr] 69 | drop(worker); [INFO] [stderr] | ^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#drop_ref [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/server/mod.rs:55:28 [INFO] [stderr] | [INFO] [stderr] 55 | let http_version = self.default_http_version.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.default_http_version` [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: empty `loop {}` detected. You may want to either use `panic!()` or add `std::thread::sleep(..);` to the loop body. [INFO] [stderr] --> src/server/mod.rs:69:9 [INFO] [stderr] | [INFO] [stderr] 69 | loop {} [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::empty_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_loop [INFO] [stderr] [INFO] [stderr] error: handle read amount returned or use `Read::read_exact` instead [INFO] [stderr] --> src/server/mod.rs:90:5 [INFO] [stderr] | [INFO] [stderr] 90 | stream.read(&mut buffer).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/server/mod.rs:92:19 [INFO] [stderr] | [INFO] [stderr] 92 | let request = match buffer.len() != 0 { [INFO] [stderr] | ___________________^ [INFO] [stderr] 93 | | false => { [INFO] [stderr] 94 | | // Request has no content [INFO] [stderr] 95 | | // TODO: Allow user to override generic response with custom route [INFO] [stderr] ... | [INFO] [stderr] 102 | | } [INFO] [stderr] 103 | | }; [INFO] [stderr] | |_____^ [INFO] [stderr] | [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] 92 | let request = if buffer.len() != 0 { [INFO] [stderr] 93 | Request::parse_request(&buffer) [INFO] [stderr] 94 | } else { [INFO] [stderr] 95 | // Request has no content [INFO] [stderr] 96 | // TODO: Allow user to override generic response with custom route [INFO] [stderr] 97 | stream.write(HTTP::get_generic_response_string(HTTPStatusCodes::c400, http_version).as_ref()).unwrap(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/server/mod.rs:92:25 [INFO] [stderr] | [INFO] [stderr] 92 | let request = match buffer.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/server/mod.rs:96:13 [INFO] [stderr] | [INFO] [stderr] 96 | stream.write(HTTP::get_generic_response_string(HTTPStatusCodes::c400, http_version).as_ref()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/server/mod.rs:111:13 [INFO] [stderr] | [INFO] [stderr] 111 | stream.write(HTTP::get_generic_response_string(HTTPStatusCodes::c400, http_version).as_ref()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/server/mod.rs:124:17 [INFO] [stderr] | [INFO] [stderr] 124 | / match route.is_route_match(some_request.get_method(), some_request.get_path()) { [INFO] [stderr] 125 | | true => { [INFO] [stderr] 126 | | // Route exists [INFO] [stderr] 127 | | // Call route handler [INFO] [stderr] ... | [INFO] [stderr] 134 | | false => continue [INFO] [stderr] 135 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [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] 124 | if route.is_route_match(some_request.get_method(), some_request.get_path()) { [INFO] [stderr] 125 | // Route exists [INFO] [stderr] 126 | // Call route handler [INFO] [stderr] 127 | let handler_box = route.get_handler(); [INFO] [stderr] 128 | let mut response = Response::from_stream(stream); [INFO] [stderr] 129 | response.set_version(http_version); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/server/mod.rs:143:13 [INFO] [stderr] | [INFO] [stderr] 143 | stream.write(not_found_response.as_ref()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `http::header::Header` [INFO] [stderr] --> src/http/header.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | / pub fn new() -> Self { [INFO] [stderr] 10 | | Self { [INFO] [stderr] 11 | | values: HashMap::new() [INFO] [stderr] 12 | | } [INFO] [stderr] 13 | | } [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] 4 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/http/request/mod.rs:57:16 [INFO] [stderr] | [INFO] [stderr] 57 | Ok(T) => T [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/http/request/mod.rs:89:40 [INFO] [stderr] | [INFO] [stderr] 89 | Some(connection_header) => match connection_header.eq(&String::from("Upgrade")) { [INFO] [stderr] | ________________________________________^ [INFO] [stderr] 90 | | true => (), // TODO: implement upgrade [INFO] [stderr] 91 | | false => () [INFO] [stderr] 92 | | } [INFO] [stderr] | |_____________^ [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: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/http/request/mod.rs:99:22 [INFO] [stderr] | [INFO] [stderr] 99 | Some(T) => payload_vec.push(T) [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/http/request/mod.rs:116:45 [INFO] [stderr] | [INFO] [stderr] 116 | let mut split_buffer = buffer.split(" "); [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/http/request/mod.rs:121:18 [INFO] [stderr] | [INFO] [stderr] 121 | Some(T) => T [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/http/request/mod.rs:128:18 [INFO] [stderr] | [INFO] [stderr] 128 | Some(T) => T [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: variable `T` should have a snake case name such as `t` [INFO] [stderr] --> src/http/request/mod.rs:135:18 [INFO] [stderr] | [INFO] [stderr] 135 | Some(T) => T [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/http/request/mod.rs:152:45 [INFO] [stderr] | [INFO] [stderr] 152 | let mut split_buffer = buffer.split("\n"); [INFO] [stderr] | ^^^^ help: try using a char instead: `'\n'` [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 match on a boolean expression [INFO] [stderr] --> src/http/response/mod.rs:73:9 [INFO] [stderr] | [INFO] [stderr] 73 | / match self.written { [INFO] [stderr] 74 | | false => format!( [INFO] [stderr] 75 | | "{} {} {}\r\n{}\r\n{}", [INFO] [stderr] 76 | | self.version.to_string(), [INFO] [stderr] ... | [INFO] [stderr] 82 | | true => format!("{}", body) [INFO] [stderr] 83 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 73 | if self.written { format!("{}", body) } else { format!( [INFO] [stderr] 74 | "{} {} {}\r\n{}\r\n{}", [INFO] [stderr] 75 | self.version.to_string(), [INFO] [stderr] 76 | self.code, [INFO] [stderr] 77 | self.reason, [INFO] [stderr] 78 | self.headers.get_headers_formatted(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/http/response/mod.rs:82:21 [INFO] [stderr] | [INFO] [stderr] 82 | true => format!("{}", body) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `body.to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [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/http/response/mod.rs:118:9 [INFO] [stderr] | [INFO] [stderr] 118 | / match self.stream { [INFO] [stderr] 119 | | Some(ref mut tcp) => { [INFO] [stderr] 120 | | tcp.write(response.as_ref()).unwrap(); [INFO] [stderr] 121 | | if flush { [INFO] [stderr] ... | [INFO] [stderr] 126 | | None => () [INFO] [stderr] 127 | | } [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] 118 | if let Some(ref mut tcp) = self.stream { [INFO] [stderr] 119 | tcp.write(response.as_ref()).unwrap(); [INFO] [stderr] 120 | if flush { [INFO] [stderr] 121 | tcp.flush().unwrap(); [INFO] [stderr] 122 | } [INFO] [stderr] 123 | self.written = true; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/http/response/mod.rs:120:17 [INFO] [stderr] | [INFO] [stderr] 120 | tcp.write(response.as_ref()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/http/mod.rs:55:5 [INFO] [stderr] | [INFO] [stderr] 55 | / pub fn from_str(buffer: &str) -> Self { [INFO] [stderr] 56 | | match buffer { [INFO] [stderr] 57 | | "GET" => HTTPMethod::GET, [INFO] [stderr] 58 | | "POST" => HTTPMethod::POST, [INFO] [stderr] ... | [INFO] [stderr] 73 | | } [INFO] [stderr] 74 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/http/mod.rs:76:22 [INFO] [stderr] | [INFO] [stderr] 76 | pub fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/http/mod.rs:117:5 [INFO] [stderr] | [INFO] [stderr] 117 | / pub fn from_str(buffer: &str) -> Self { [INFO] [stderr] 118 | | match buffer { [INFO] [stderr] 119 | | "HTTP/1.0" => HTTPVersion::HTTP10, [INFO] [stderr] 120 | | "HTTP/1.1" => HTTPVersion::HTTP11, [INFO] [stderr] ... | [INFO] [stderr] 123 | | } [INFO] [stderr] 124 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/http/mod.rs:126:22 [INFO] [stderr] | [INFO] [stderr] 126 | pub fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: variant `c100` should have a camel case name such as `C100` [INFO] [stderr] --> src/http/mod.rs:137:5 [INFO] [stderr] | [INFO] [stderr] 137 | c100, c101, [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_camel_case_types)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant `c101` should have a camel case name such as `C101` [INFO] [stderr] --> src/http/mod.rs:137:11 [INFO] [stderr] | [INFO] [stderr] 137 | c100, c101, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c200` should have a camel case name such as `C200` [INFO] [stderr] --> src/http/mod.rs:138:5 [INFO] [stderr] | [INFO] [stderr] 138 | c200, c201, c202, c203, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c201` should have a camel case name such as `C201` [INFO] [stderr] --> src/http/mod.rs:138:11 [INFO] [stderr] | [INFO] [stderr] 138 | c200, c201, c202, c203, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c202` should have a camel case name such as `C202` [INFO] [stderr] --> src/http/mod.rs:138:17 [INFO] [stderr] | [INFO] [stderr] 138 | c200, c201, c202, c203, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c203` should have a camel case name such as `C203` [INFO] [stderr] --> src/http/mod.rs:138:23 [INFO] [stderr] | [INFO] [stderr] 138 | c200, c201, c202, c203, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c204` should have a camel case name such as `C204` [INFO] [stderr] --> src/http/mod.rs:139:5 [INFO] [stderr] | [INFO] [stderr] 139 | c204, c205, c206, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c205` should have a camel case name such as `C205` [INFO] [stderr] --> src/http/mod.rs:139:11 [INFO] [stderr] | [INFO] [stderr] 139 | c204, c205, c206, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c206` should have a camel case name such as `C206` [INFO] [stderr] --> src/http/mod.rs:139:17 [INFO] [stderr] | [INFO] [stderr] 139 | c204, c205, c206, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c300` should have a camel case name such as `C300` [INFO] [stderr] --> src/http/mod.rs:140:5 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c301` should have a camel case name such as `C301` [INFO] [stderr] --> src/http/mod.rs:140:11 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c302` should have a camel case name such as `C302` [INFO] [stderr] --> src/http/mod.rs:140:17 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c303` should have a camel case name such as `C303` [INFO] [stderr] --> src/http/mod.rs:140:23 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c304` should have a camel case name such as `C304` [INFO] [stderr] --> src/http/mod.rs:140:29 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c305` should have a camel case name such as `C305` [INFO] [stderr] --> src/http/mod.rs:140:35 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c306` should have a camel case name such as `C306` [INFO] [stderr] --> src/http/mod.rs:140:41 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c307` should have a camel case name such as `C307` [INFO] [stderr] --> src/http/mod.rs:140:47 [INFO] [stderr] | [INFO] [stderr] 140 | c300, c301, c302, c303, c304, c305, c306, c307, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c400` should have a camel case name such as `C400` [INFO] [stderr] --> src/http/mod.rs:141:5 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c401` should have a camel case name such as `C401` [INFO] [stderr] --> src/http/mod.rs:141:11 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c402` should have a camel case name such as `C402` [INFO] [stderr] --> src/http/mod.rs:141:17 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c403` should have a camel case name such as `C403` [INFO] [stderr] --> src/http/mod.rs:141:23 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c404` should have a camel case name such as `C404` [INFO] [stderr] --> src/http/mod.rs:141:29 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c405` should have a camel case name such as `C405` [INFO] [stderr] --> src/http/mod.rs:141:35 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c406` should have a camel case name such as `C406` [INFO] [stderr] --> src/http/mod.rs:141:41 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c407` should have a camel case name such as `C407` [INFO] [stderr] --> src/http/mod.rs:141:47 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c408` should have a camel case name such as `C408` [INFO] [stderr] --> src/http/mod.rs:141:53 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c409` should have a camel case name such as `C409` [INFO] [stderr] --> src/http/mod.rs:141:59 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c410` should have a camel case name such as `C410` [INFO] [stderr] --> src/http/mod.rs:141:65 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c411` should have a camel case name such as `C411` [INFO] [stderr] --> src/http/mod.rs:141:71 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c412` should have a camel case name such as `C412` [INFO] [stderr] --> src/http/mod.rs:141:77 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c413` should have a camel case name such as `C413` [INFO] [stderr] --> src/http/mod.rs:141:83 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c414` should have a camel case name such as `C414` [INFO] [stderr] --> src/http/mod.rs:141:89 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c415` should have a camel case name such as `C415` [INFO] [stderr] --> src/http/mod.rs:141:95 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c416` should have a camel case name such as `C416` [INFO] [stderr] --> src/http/mod.rs:141:101 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c417` should have a camel case name such as `C417` [INFO] [stderr] --> src/http/mod.rs:141:107 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c418` should have a camel case name such as `C418` [INFO] [stderr] --> src/http/mod.rs:141:113 [INFO] [stderr] | [INFO] [stderr] 141 | c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c500` should have a camel case name such as `C500` [INFO] [stderr] --> src/http/mod.rs:142:5 [INFO] [stderr] | [INFO] [stderr] 142 | c500, c501, c502, c503, c504, c505 [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c501` should have a camel case name such as `C501` [INFO] [stderr] --> src/http/mod.rs:142:11 [INFO] [stderr] | [INFO] [stderr] 142 | c500, c501, c502, c503, c504, c505 [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c502` should have a camel case name such as `C502` [INFO] [stderr] --> src/http/mod.rs:142:17 [INFO] [stderr] | [INFO] [stderr] 142 | c500, c501, c502, c503, c504, c505 [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c503` should have a camel case name such as `C503` [INFO] [stderr] --> src/http/mod.rs:142:23 [INFO] [stderr] | [INFO] [stderr] 142 | c500, c501, c502, c503, c504, c505 [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c504` should have a camel case name such as `C504` [INFO] [stderr] --> src/http/mod.rs:142:29 [INFO] [stderr] | [INFO] [stderr] 142 | c500, c501, c502, c503, c504, c505 [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `c505` should have a camel case name such as `C505` [INFO] [stderr] --> src/http/mod.rs:142:35 [INFO] [stderr] | [INFO] [stderr] 142 | c500, c501, c502, c503, c504, c505 [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] error: aborting due to 6 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `hapi_rs`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "ce82739c572623fe21dc402224e1ddaa0c789c34370b9f759a0ad571d20b5d02"` [INFO] running `"docker" "rm" "-f" "ce82739c572623fe21dc402224e1ddaa0c789c34370b9f759a0ad571d20b5d02"` [INFO] [stdout] ce82739c572623fe21dc402224e1ddaa0c789c34370b9f759a0ad571d20b5d02