[INFO] updating cached repository Weltraumschaf/webserver [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/Weltraumschaf/webserver [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/Weltraumschaf/webserver" "work/ex/clippy-test-run/sources/stable/gh/Weltraumschaf/webserver"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/Weltraumschaf/webserver'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/Weltraumschaf/webserver" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Weltraumschaf/webserver"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Weltraumschaf/webserver'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] ad0cab52fb77e6deb6c78d14ffe56ce2a486380e [INFO] sha for GitHub repo Weltraumschaf/webserver: ad0cab52fb77e6deb6c78d14ffe56ce2a486380e [INFO] validating manifest of Weltraumschaf/webserver 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 Weltraumschaf/webserver 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 Weltraumschaf/webserver [INFO] finished frobbing Weltraumschaf/webserver [INFO] frobbed toml for Weltraumschaf/webserver written to work/ex/clippy-test-run/sources/stable/gh/Weltraumschaf/webserver/Cargo.toml [INFO] started frobbing Weltraumschaf/webserver [INFO] finished frobbing Weltraumschaf/webserver [INFO] frobbed toml for Weltraumschaf/webserver written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Weltraumschaf/webserver/Cargo.toml [INFO] crate Weltraumschaf/webserver 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 Weltraumschaf/webserver against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/Weltraumschaf/webserver:/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] 93ccf74c7e35c6382c9ce39a761b54d9b0acffcf278870eeeae806aa0e924e27 [INFO] running `"docker" "start" "-a" "93ccf74c7e35c6382c9ce39a761b54d9b0acffcf278870eeeae806aa0e924e27"` [INFO] [stderr] warning: unused manifest key: package.travis-ci [INFO] [stderr] Checking chrono v0.4.0 [INFO] [stderr] Checking hamcrest v0.1.5 [INFO] [stderr] Checking flexi_logger v0.6.13 [INFO] [stderr] Checking webserver v1.0.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:112:45 [INFO] [stderr] | [INFO] [stderr] 112 | Ok(Config { address, port, threads, web_dir: web_dir, log_level, log_dir }) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `web_dir` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:112:45 [INFO] [stderr] | [INFO] [stderr] 112 | Ok(Config { address, port, threads, web_dir: web_dir, log_level, log_dir }) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `web_dir` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:97:43 [INFO] [stderr] | [INFO] [stderr] 97 | fn with_method(&mut self, new_method: &String) { [INFO] [stderr] | ^^^^^^^ [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] help: change this to [INFO] [stderr] | [INFO] [stderr] 97 | fn with_method(&mut self, new_method: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_method.clone()` to [INFO] [stderr] | [INFO] [stderr] 98 | self.method = new_method.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:101:37 [INFO] [stderr] | [INFO] [stderr] 101 | fn with_url(&mut self, new_url: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 101 | fn with_url(&mut self, new_url: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_url.clone()` to [INFO] [stderr] | [INFO] [stderr] 102 | self.url = new_url.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:105:45 [INFO] [stderr] | [INFO] [stderr] 105 | fn with_version(&mut self, new_version: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 105 | fn with_version(&mut self, new_version: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_version.clone()` to [INFO] [stderr] | [INFO] [stderr] 106 | self.version = new_version.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:109:39 [INFO] [stderr] | [INFO] [stderr] 109 | fn with_host(&mut self, new_host: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 109 | fn with_host(&mut self, new_host: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_host.clone()` to [INFO] [stderr] | [INFO] [stderr] 110 | self.host = new_host.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:113:51 [INFO] [stderr] | [INFO] [stderr] 113 | fn with_user_agent(&mut self, new_user_agent: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 113 | fn with_user_agent(&mut self, new_user_agent: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_user_agent.clone()` to [INFO] [stderr] | [INFO] [stderr] 114 | self.user_agent = new_user_agent.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:117:43 [INFO] [stderr] | [INFO] [stderr] 117 | fn with_accept(&mut self, new_accept: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 117 | fn with_accept(&mut self, new_accept: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_accept.clone()` to [INFO] [stderr] | [INFO] [stderr] 118 | self.accept = new_accept.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:121:61 [INFO] [stderr] | [INFO] [stderr] 121 | fn with_accept_language(&mut self, new_accept_language: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 121 | fn with_accept_language(&mut self, new_accept_language: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_accept_language.clone()` to [INFO] [stderr] | [INFO] [stderr] 122 | self.accept_language = new_accept_language.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:125:61 [INFO] [stderr] | [INFO] [stderr] 125 | fn with_accept_encoding(&mut self, new_accept_encoding: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 125 | fn with_accept_encoding(&mut self, new_accept_encoding: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_accept_encoding.clone()` to [INFO] [stderr] | [INFO] [stderr] 126 | self.accept_encoding = new_accept_encoding.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:129:43 [INFO] [stderr] | [INFO] [stderr] 129 | fn with_cookie(&mut self, new_cookie: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 129 | fn with_cookie(&mut self, new_cookie: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_cookie.clone()` to [INFO] [stderr] | [INFO] [stderr] 130 | self.cookie = new_cookie.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:133:51 [INFO] [stderr] | [INFO] [stderr] 133 | fn with_connection(&mut self, new_connection: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 133 | fn with_connection(&mut self, new_connection: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_connection.clone()` to [INFO] [stderr] | [INFO] [stderr] 134 | self.connection = new_connection.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:137:81 [INFO] [stderr] | [INFO] [stderr] 137 | fn with_upgrade_insecure_requests(&mut self, new_upgrade_insecure_requests: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 137 | fn with_upgrade_insecure_requests(&mut self, new_upgrade_insecure_requests: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_upgrade_insecure_requests.clone()` to [INFO] [stderr] | [INFO] [stderr] 138 | self.upgrade_insecure_requests = new_upgrade_insecure_requests.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:141:45 [INFO] [stderr] | [INFO] [stderr] 141 | fn with_referer(&mut self, new_referer: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 141 | fn with_referer(&mut self, new_referer: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_referer.clone()` to [INFO] [stderr] | [INFO] [stderr] 142 | self.referer = new_referer.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:145:57 [INFO] [stderr] | [INFO] [stderr] 145 | fn with_cache_control(&mut self, new_cache_control: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 145 | fn with_cache_control(&mut self, new_cache_control: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_cache_control.clone()` to [INFO] [stderr] | [INFO] [stderr] 146 | self.cache_control = new_cache_control.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/http.rs:181:21 [INFO] [stderr] | [INFO] [stderr] 181 | buffer.push('\r' as u8); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'\r' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/http.rs:182:21 [INFO] [stderr] | [INFO] [stderr] 182 | buffer.push('\n' as u8); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'\n' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/http.rs:273:9 [INFO] [stderr] | [INFO] [stderr] 273 | / match token { [INFO] [stderr] 274 | | &RequestToken::Method(ref method) => builder.with_method(&method), [INFO] [stderr] 275 | | &RequestToken::Url(ref url) => builder.with_url(&url), [INFO] [stderr] 276 | | &RequestToken::Version(ref version) => builder.with_version(&version), [INFO] [stderr] ... | [INFO] [stderr] 298 | | _ => panic!("Should not happen!"), [INFO] [stderr] 299 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 273 | match *token { [INFO] [stderr] 274 | RequestToken::Method(ref method) => builder.with_method(&method), [INFO] [stderr] 275 | RequestToken::Url(ref url) => builder.with_url(&url), [INFO] [stderr] 276 | RequestToken::Version(ref version) => builder.with_version(&version), [INFO] [stderr] 277 | RequestToken::HeaderName(ref name) => { [INFO] [stderr] 278 | let value_token = tokens_iterator.next() [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/http.rs:279:22 [INFO] [stderr] | [INFO] [stderr] 279 | .expect(format!("Expecting a value for header '{}'!", &name).as_str()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Expecting a value for header '{}'!", &name))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/http.rs:281:17 [INFO] [stderr] | [INFO] [stderr] 281 | / if let &RequestToken::HeaderValue(ref value) = value_token { [INFO] [stderr] 282 | | match name.as_str() { [INFO] [stderr] 283 | | "Host" => builder.with_host(&value.clone()), [INFO] [stderr] 284 | | "User-Agent" => builder.with_user_agent(&value.clone()), [INFO] [stderr] ... | [INFO] [stderr] 294 | | } [INFO] [stderr] 295 | | } [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] 281 | if let RequestToken::HeaderValue(ref value) = *value_token { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/http.rs:333:39 [INFO] [stderr] | [INFO] [stderr] 333 | let parts: Vec<&str> = line.split(" ").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/http.rs:345:36 [INFO] [stderr] | [INFO] [stderr] 345 | let colon_position = line.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] error: handle read amount returned or use `Read::read_exact` instead [INFO] [stderr] --> src/server.rs:80:9 [INFO] [stderr] | [INFO] [stderr] 80 | / stream.read(&mut buffer) [INFO] [stderr] 81 | | .expect("Can't read from TCP stream!"); [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] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/server.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | / stream.write(&response.render()) [INFO] [stderr] 91 | | .expect("Can't write to TCP stream!"); [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: the loop variable `i` is only used to index `input`. [INFO] [stderr] --> src/server.rs:100:14 [INFO] [stderr] | [INFO] [stderr] 100 | for i in 0..input.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] 100 | for in &input { [INFO] [stderr] | ^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/server.rs:180:9 [INFO] [stderr] | [INFO] [stderr] 180 | "Method not supported by this HTTP server implementation!".as_bytes().to_vec()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"Method not supported by this HTTP server implementation!"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/server.rs:222:9 [INFO] [stderr] | [INFO] [stderr] 222 | "Not found!".as_bytes().to_vec()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"Not found!"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/server.rs:255:35 [INFO] [stderr] | [INFO] [stderr] 255 | fn create_resource_path(web_root: &String, resource_url: &String) -> PathBuf { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/server.rs:255:58 [INFO] [stderr] | [INFO] [stderr] 255 | fn create_resource_path(web_root: &String, resource_url: &String) -> PathBuf { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/server.rs:260:33 [INFO] [stderr] | [INFO] [stderr] 260 | fn relativize_uri(resource_url: &String) -> String { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 260 | fn relativize_uri(resource_url: &str) -> String { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `resource_url.clone()` to [INFO] [stderr] | [INFO] [stderr] 264 | resource_url.to_string() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/server.rs:261:33 [INFO] [stderr] | [INFO] [stderr] 261 | if resource_url.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] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `webserver`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:97:43 [INFO] [stderr] | [INFO] [stderr] 97 | fn with_method(&mut self, new_method: &String) { [INFO] [stderr] | ^^^^^^^ [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] help: change this to [INFO] [stderr] | [INFO] [stderr] 97 | fn with_method(&mut self, new_method: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_method.clone()` to [INFO] [stderr] | [INFO] [stderr] 98 | self.method = new_method.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:101:37 [INFO] [stderr] | [INFO] [stderr] 101 | fn with_url(&mut self, new_url: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 101 | fn with_url(&mut self, new_url: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_url.clone()` to [INFO] [stderr] | [INFO] [stderr] 102 | self.url = new_url.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:105:45 [INFO] [stderr] | [INFO] [stderr] 105 | fn with_version(&mut self, new_version: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 105 | fn with_version(&mut self, new_version: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_version.clone()` to [INFO] [stderr] | [INFO] [stderr] 106 | self.version = new_version.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:109:39 [INFO] [stderr] | [INFO] [stderr] 109 | fn with_host(&mut self, new_host: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 109 | fn with_host(&mut self, new_host: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_host.clone()` to [INFO] [stderr] | [INFO] [stderr] 110 | self.host = new_host.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:113:51 [INFO] [stderr] | [INFO] [stderr] 113 | fn with_user_agent(&mut self, new_user_agent: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 113 | fn with_user_agent(&mut self, new_user_agent: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_user_agent.clone()` to [INFO] [stderr] | [INFO] [stderr] 114 | self.user_agent = new_user_agent.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:117:43 [INFO] [stderr] | [INFO] [stderr] 117 | fn with_accept(&mut self, new_accept: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 117 | fn with_accept(&mut self, new_accept: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_accept.clone()` to [INFO] [stderr] | [INFO] [stderr] 118 | self.accept = new_accept.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:121:61 [INFO] [stderr] | [INFO] [stderr] 121 | fn with_accept_language(&mut self, new_accept_language: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 121 | fn with_accept_language(&mut self, new_accept_language: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_accept_language.clone()` to [INFO] [stderr] | [INFO] [stderr] 122 | self.accept_language = new_accept_language.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:125:61 [INFO] [stderr] | [INFO] [stderr] 125 | fn with_accept_encoding(&mut self, new_accept_encoding: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 125 | fn with_accept_encoding(&mut self, new_accept_encoding: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_accept_encoding.clone()` to [INFO] [stderr] | [INFO] [stderr] 126 | self.accept_encoding = new_accept_encoding.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:129:43 [INFO] [stderr] | [INFO] [stderr] 129 | fn with_cookie(&mut self, new_cookie: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 129 | fn with_cookie(&mut self, new_cookie: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_cookie.clone()` to [INFO] [stderr] | [INFO] [stderr] 130 | self.cookie = new_cookie.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:133:51 [INFO] [stderr] | [INFO] [stderr] 133 | fn with_connection(&mut self, new_connection: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 133 | fn with_connection(&mut self, new_connection: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_connection.clone()` to [INFO] [stderr] | [INFO] [stderr] 134 | self.connection = new_connection.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:137:81 [INFO] [stderr] | [INFO] [stderr] 137 | fn with_upgrade_insecure_requests(&mut self, new_upgrade_insecure_requests: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 137 | fn with_upgrade_insecure_requests(&mut self, new_upgrade_insecure_requests: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_upgrade_insecure_requests.clone()` to [INFO] [stderr] | [INFO] [stderr] 138 | self.upgrade_insecure_requests = new_upgrade_insecure_requests.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:141:45 [INFO] [stderr] | [INFO] [stderr] 141 | fn with_referer(&mut self, new_referer: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 141 | fn with_referer(&mut self, new_referer: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_referer.clone()` to [INFO] [stderr] | [INFO] [stderr] 142 | self.referer = new_referer.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/http.rs:145:57 [INFO] [stderr] | [INFO] [stderr] 145 | fn with_cache_control(&mut self, new_cache_control: &String) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 145 | fn with_cache_control(&mut self, new_cache_control: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `new_cache_control.clone()` to [INFO] [stderr] | [INFO] [stderr] 146 | self.cache_control = new_cache_control.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/http.rs:181:21 [INFO] [stderr] | [INFO] [stderr] 181 | buffer.push('\r' as u8); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'\r' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/http.rs:182:21 [INFO] [stderr] | [INFO] [stderr] 182 | buffer.push('\n' as u8); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'\n' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/http.rs:273:9 [INFO] [stderr] | [INFO] [stderr] 273 | / match token { [INFO] [stderr] 274 | | &RequestToken::Method(ref method) => builder.with_method(&method), [INFO] [stderr] 275 | | &RequestToken::Url(ref url) => builder.with_url(&url), [INFO] [stderr] 276 | | &RequestToken::Version(ref version) => builder.with_version(&version), [INFO] [stderr] ... | [INFO] [stderr] 298 | | _ => panic!("Should not happen!"), [INFO] [stderr] 299 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 273 | match *token { [INFO] [stderr] 274 | RequestToken::Method(ref method) => builder.with_method(&method), [INFO] [stderr] 275 | RequestToken::Url(ref url) => builder.with_url(&url), [INFO] [stderr] 276 | RequestToken::Version(ref version) => builder.with_version(&version), [INFO] [stderr] 277 | RequestToken::HeaderName(ref name) => { [INFO] [stderr] 278 | let value_token = tokens_iterator.next() [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/http.rs:279:22 [INFO] [stderr] | [INFO] [stderr] 279 | .expect(format!("Expecting a value for header '{}'!", &name).as_str()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Expecting a value for header '{}'!", &name))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/http.rs:281:17 [INFO] [stderr] | [INFO] [stderr] 281 | / if let &RequestToken::HeaderValue(ref value) = value_token { [INFO] [stderr] 282 | | match name.as_str() { [INFO] [stderr] 283 | | "Host" => builder.with_host(&value.clone()), [INFO] [stderr] 284 | | "User-Agent" => builder.with_user_agent(&value.clone()), [INFO] [stderr] ... | [INFO] [stderr] 294 | | } [INFO] [stderr] 295 | | } [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] 281 | if let RequestToken::HeaderValue(ref value) = *value_token { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/http.rs:333:39 [INFO] [stderr] | [INFO] [stderr] 333 | let parts: Vec<&str> = line.split(" ").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/http.rs:345:36 [INFO] [stderr] | [INFO] [stderr] 345 | let colon_position = line.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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/http.rs:516:13 [INFO] [stderr] | [INFO] [stderr] 516 | "Hello, World!".as_bytes().to_vec() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"Hello, World!"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/http.rs:532:13 [INFO] [stderr] | [INFO] [stderr] 532 | "This is not allowed!".as_bytes().to_vec() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"This is not allowed!"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] error: handle read amount returned or use `Read::read_exact` instead [INFO] [stderr] --> src/server.rs:80:9 [INFO] [stderr] | [INFO] [stderr] 80 | / stream.read(&mut buffer) [INFO] [stderr] 81 | | .expect("Can't read from TCP stream!"); [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] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/server.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | / stream.write(&response.render()) [INFO] [stderr] 91 | | .expect("Can't write to TCP stream!"); [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: the loop variable `i` is only used to index `input`. [INFO] [stderr] --> src/server.rs:100:14 [INFO] [stderr] | [INFO] [stderr] 100 | for i in 0..input.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] 100 | for in &input { [INFO] [stderr] | ^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/server.rs:180:9 [INFO] [stderr] | [INFO] [stderr] 180 | "Method not supported by this HTTP server implementation!".as_bytes().to_vec()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"Method not supported by this HTTP server implementation!"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/server.rs:222:9 [INFO] [stderr] | [INFO] [stderr] 222 | "Not found!".as_bytes().to_vec()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"Not found!"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/server.rs:255:35 [INFO] [stderr] | [INFO] [stderr] 255 | fn create_resource_path(web_root: &String, resource_url: &String) -> PathBuf { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/server.rs:255:58 [INFO] [stderr] | [INFO] [stderr] 255 | fn create_resource_path(web_root: &String, resource_url: &String) -> PathBuf { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/server.rs:260:33 [INFO] [stderr] | [INFO] [stderr] 260 | fn relativize_uri(resource_url: &String) -> String { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 260 | fn relativize_uri(resource_url: &str) -> String { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `resource_url.clone()` to [INFO] [stderr] | [INFO] [stderr] 264 | resource_url.to_string() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/server.rs:261:33 [INFO] [stderr] | [INFO] [stderr] 261 | if resource_url.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] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `webserver`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "93ccf74c7e35c6382c9ce39a761b54d9b0acffcf278870eeeae806aa0e924e27"` [INFO] running `"docker" "rm" "-f" "93ccf74c7e35c6382c9ce39a761b54d9b0acffcf278870eeeae806aa0e924e27"` [INFO] [stdout] 93ccf74c7e35c6382c9ce39a761b54d9b0acffcf278870eeeae806aa0e924e27