[INFO] crate webmachine-rust 0.0.0 is already in cache [INFO] extracting crate webmachine-rust 0.0.0 into work/ex/clippy-test-run/sources/stable/reg/webmachine-rust/0.0.0 [INFO] extracting crate webmachine-rust 0.0.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/webmachine-rust/0.0.0 [INFO] validating manifest of webmachine-rust-0.0.0 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of webmachine-rust-0.0.0 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing webmachine-rust-0.0.0 [INFO] finished frobbing webmachine-rust-0.0.0 [INFO] frobbed toml for webmachine-rust-0.0.0 written to work/ex/clippy-test-run/sources/stable/reg/webmachine-rust/0.0.0/Cargo.toml [INFO] started frobbing webmachine-rust-0.0.0 [INFO] finished frobbing webmachine-rust-0.0.0 [INFO] frobbed toml for webmachine-rust-0.0.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/webmachine-rust/0.0.0/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting webmachine-rust-0.0.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-3/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/webmachine-rust/0.0.0:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 4682e82ebc3235e65b1c32bdb45e853e36ab8cbe78f3a5585e6822bd23bc456d [INFO] running `"docker" "start" "-a" "4682e82ebc3235e65b1c32bdb45e853e36ab8cbe78f3a5585e6822bd23bc456d"` [INFO] [stderr] Checking p-macro v0.2.0 [INFO] [stderr] Checking maplit v0.1.6 [INFO] [stderr] Compiling getopts v0.2.18 [INFO] [stderr] Compiling rand v0.4.6 [INFO] [stderr] Checking hpack v0.2.0 [INFO] [stderr] Checking cookie v0.2.5 [INFO] [stderr] Checking chrono v0.2.25 [INFO] [stderr] Compiling pulldown-cmark v0.0.3 [INFO] [stderr] Checking solicit v0.4.4 [INFO] [stderr] Checking hyper v0.9.18 [INFO] [stderr] Compiling tempdir v0.3.7 [INFO] [stderr] Compiling skeptic v0.4.0 [INFO] [stderr] Compiling expectest v0.5.1 [INFO] [stderr] Checking webmachine-rust v0.0.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:828:9 [INFO] [stderr] | [INFO] [stderr] 828 | body: body [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `body` [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:946:13 [INFO] [stderr] | [INFO] [stderr] 946 | request: request, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:828:9 [INFO] [stderr] | [INFO] [stderr] 828 | body: body [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `body` [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:946:13 [INFO] [stderr] | [INFO] [stderr] 946 | request: request, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `request` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: unused `#[macro_use]` import [INFO] [stderr] --> src/lib.rs:126:1 [INFO] [stderr] | [INFO] [stderr] 126 | #[macro_use] extern crate itertools; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/headers.rs:172:16 [INFO] [stderr] | [INFO] [stderr] 172 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 173 | | if self.params.is_empty() { [INFO] [stderr] 174 | | self.value.clone() [INFO] [stderr] 175 | | } else { [INFO] [stderr] 176 | | format!("{}; {}", self.value, sparams) [INFO] [stderr] 177 | | } [INFO] [stderr] 178 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 172 | } else if self.params.is_empty() { [INFO] [stderr] 173 | self.value.clone() [INFO] [stderr] 174 | } else { [INFO] [stderr] 175 | format!("{}; {}", self.value, sparams) [INFO] [stderr] 176 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused `#[macro_use]` import [INFO] [stderr] --> src/lib.rs:126:1 [INFO] [stderr] | [INFO] [stderr] 126 | #[macro_use] extern crate itertools; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/headers.rs:172:16 [INFO] [stderr] | [INFO] [stderr] 172 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 173 | | if self.params.is_empty() { [INFO] [stderr] 174 | | self.value.clone() [INFO] [stderr] 175 | | } else { [INFO] [stderr] 176 | | format!("{}; {}", self.value, sparams) [INFO] [stderr] 177 | | } [INFO] [stderr] 178 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 172 | } else if self.params.is_empty() { [INFO] [stderr] 173 | self.value.clone() [INFO] [stderr] 174 | } else { [INFO] [stderr] 175 | format!("{}; {}", self.value, sparams) [INFO] [stderr] 176 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused import: `headers::*` [INFO] [stderr] --> src/context.rs:261:9 [INFO] [stderr] | [INFO] [stderr] 261 | use headers::*; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::context::*` [INFO] [stderr] --> src/tests.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | use super::context::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::headers::*` [INFO] [stderr] --> src/tests.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use super::headers::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `chrono::*` [INFO] [stderr] --> src/tests.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | use chrono::*; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `headers::*` [INFO] [stderr] --> src/content_negotiation_tests.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use headers::*; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `context::*` [INFO] [stderr] --> src/content_negotiation_tests.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use context::*; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/headers.rs:13:34 [INFO] [stderr] | [INFO] [stderr] 13 | values.into_iter().batching(|mut it| { [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/headers.rs:13:12 [INFO] [stderr] | [INFO] [stderr] 13 | values.into_iter().batching(|mut it| { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/headers.rs:153:21 [INFO] [stderr] | [INFO] [stderr] 153 | pub fn basic(s: &String) -> HeaderValue { [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] 153 | pub fn basic(s: &str) -> HeaderValue { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `s.clone()` to [INFO] [stderr] | [INFO] [stderr] 155 | value: s.to_string(), [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/context.rs:39:35 [INFO] [stderr] | [INFO] [stderr] 39 | Some(header) => match self.headers.get(header).unwrap().first() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.headers[header]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/context.rs:123:38 [INFO] [stderr] | [INFO] [stderr] 123 | pub fn has_header(&self, header: &String) -> bool { [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: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/context.rs:124:9 [INFO] [stderr] | [INFO] [stderr] 124 | self.headers.keys().find(|k| k.to_uppercase() == header.to_uppercase()).is_some() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = note: replace `find(|k| k.to_uppercase() == header.to_uppercase()).is_some()` with `any(|k| k.to_uppercase() == header.to_uppercase())` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/context.rs:129:39 [INFO] [stderr] | [INFO] [stderr] 129 | pub fn find_header(&self, header: &String) -> Vec { [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/context.rs:131:29 [INFO] [stderr] | [INFO] [stderr] 131 | Some(header) => self.headers.get(header).unwrap().clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.headers[header]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/context.rs:137:44 [INFO] [stderr] | [INFO] [stderr] 137 | pub fn has_header_value(&self, header: &String, value: &String) -> bool { [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/context.rs:137:60 [INFO] [stderr] | [INFO] [stderr] 137 | pub fn has_header_value(&self, header: &String, value: &String) -> bool { [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: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/context.rs:139:29 [INFO] [stderr] | [INFO] [stderr] 139 | Some(header) => match self.headers.get(header).unwrap().iter().find(|val| *val == value) { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 140 | | Some(_) => true, [INFO] [stderr] 141 | | None => false [INFO] [stderr] 142 | | }, [INFO] [stderr] | |_____________^ help: try this: `self.headers.get(header).unwrap().iter().find(|val| *val == value).is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/context.rs:139:35 [INFO] [stderr] | [INFO] [stderr] 139 | Some(header) => match self.headers.get(header).unwrap().iter().find(|val| *val == value) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.headers[header]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/context.rs:170:38 [INFO] [stderr] | [INFO] [stderr] 170 | pub fn has_header(&self, header: &String) -> bool { [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: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/context.rs:171:9 [INFO] [stderr] | [INFO] [stderr] 171 | self.headers.keys().find(|k| k.to_uppercase() == header.to_uppercase()).is_some() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: replace `find(|k| k.to_uppercase() == header.to_uppercase()).is_some()` with `any(|k| k.to_uppercase() == header.to_uppercase())` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/context.rs:187:57 [INFO] [stderr] | [INFO] [stderr] 187 | pub fn add_cors_headers(&mut self, allowed_methods: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [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 `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/context.rs:195:42 [INFO] [stderr] | [INFO] [stderr] 195 | pub fn cors_headers(allowed_methods: &Vec) -> HashMap> { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [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: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/context.rs:205:9 [INFO] [stderr] | [INFO] [stderr] 205 | / match &self.body { [INFO] [stderr] 206 | | &None => false, [INFO] [stderr] 207 | | &Some(ref body) => !body.is_empty() [INFO] [stderr] 208 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 205 | match self.body { [INFO] [stderr] 206 | None => false, [INFO] [stderr] 207 | Some(ref body) => !body.is_empty() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/content_negotiation.rs:36:37 [INFO] [stderr] | [INFO] [stderr] 36 | pub fn parse_string(media_type: &String) -> MediaType { [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/content_negotiation.rs:54:39 [INFO] [stderr] | [INFO] [stderr] 54 | pub fn with_weight(&self, weight: &String) -> MediaType { [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/content_negotiation.rs:96:62 [INFO] [stderr] | [INFO] [stderr] 96 | MediaType::parse_string(&self.value).with_weight(self.params.get(&s!("q")).unwrap()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.params[&s!("q")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/content_negotiation.rs:104:38 [INFO] [stderr] | [INFO] [stderr] 104 | pub fn sort_media_types(media_types: &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: change this to: `&[HeaderValue]` [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: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/content_negotiation.rs:105:17 [INFO] [stderr] | [INFO] [stderr] 105 | media_types.into_iter().cloned().sorted_by(|a, b| { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/content_negotiation.rs:122:9 [INFO] [stderr] | [INFO] [stderr] 122 | / resource.produces.iter() [INFO] [stderr] 123 | | .cloned() [INFO] [stderr] 124 | | .cartesian_product(acceptable_media_types.iter()) [INFO] [stderr] 125 | | .map(|(produced, acceptable)| { [INFO] [stderr] ... | [INFO] [stderr] 132 | | .filter(|val| val.2 != MediaTypeMatch::None) [INFO] [stderr] 133 | | .next().map(|result| result.0.to_string()) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::filter_next)] on by default [INFO] [stderr] = note: replace `filter(|val| val.2 != MediaTypeMatch::None).next()` with `find(|val| val.2 != MediaTypeMatch::None)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/content_negotiation.rs:152:35 [INFO] [stderr] | [INFO] [stderr] 152 | pub fn parse_string(language: &String) -> MediaLanguage { [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/content_negotiation.rs:170:39 [INFO] [stderr] | [INFO] [stderr] 170 | pub fn with_weight(&self, weight: &String) -> MediaLanguage { [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/content_negotiation.rs:202:66 [INFO] [stderr] | [INFO] [stderr] 202 | MediaLanguage::parse_string(&self.value).with_weight(self.params.get(&s!("q")).unwrap()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.params[&s!("q")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/content_negotiation.rs:210:46 [INFO] [stderr] | [INFO] [stderr] 210 | pub fn sort_media_languages(media_languages: &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: change this to: `&[HeaderValue]` [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: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/content_negotiation.rs:211:21 [INFO] [stderr] | [INFO] [stderr] 211 | media_languages.into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/content_negotiation.rs:257:34 [INFO] [stderr] | [INFO] [stderr] 257 | pub fn parse_string(charset: &String) -> Charset { [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] 257 | pub fn parse_string(charset: &str) -> Charset { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `charset.clone()` to [INFO] [stderr] | [INFO] [stderr] 259 | charset: charset.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/content_negotiation.rs:265:39 [INFO] [stderr] | [INFO] [stderr] 265 | pub fn with_weight(&self, weight: &String) -> Charset { [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/content_negotiation.rs:287:60 [INFO] [stderr] | [INFO] [stderr] 287 | Charset::parse_string(&self.value).with_weight(self.params.get(&s!("q")).unwrap()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.params[&s!("q")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/content_negotiation.rs:296:38 [INFO] [stderr] | [INFO] [stderr] 296 | pub fn sort_media_charsets(charsets: &Vec) -> Vec { [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] 296 | pub fn sort_media_charsets(charsets: &[HeaderValue]) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] help: change `charsets.clone()` to [INFO] [stderr] | [INFO] [stderr] 297 | let mut charsets = charsets.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/content_negotiation.rs:346:35 [INFO] [stderr] | [INFO] [stderr] 346 | pub fn parse_string(encoding: &String) -> Encoding { [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] 346 | pub fn parse_string(encoding: &str) -> Encoding { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `encoding.clone()` to [INFO] [stderr] | [INFO] [stderr] 348 | encoding: 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/content_negotiation.rs:354:39 [INFO] [stderr] | [INFO] [stderr] 354 | pub fn with_weight(&self, weight: &String) -> Encoding { [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/content_negotiation.rs:376:61 [INFO] [stderr] | [INFO] [stderr] 376 | Encoding::parse_string(&self.value).with_weight(self.params.get(&s!("q")).unwrap()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.params[&s!("q")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/content_negotiation.rs:385:34 [INFO] [stderr] | [INFO] [stderr] 385 | pub fn sort_encodings(encodings: &Vec) -> Vec { [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] 385 | pub fn sort_encodings(encodings: &[HeaderValue]) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] help: change `encodings.clone()` to [INFO] [stderr] | [INFO] [stderr] 386 | let mut encodings = encodings.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/lib.rs:201:18 [INFO] [stderr] | [INFO] [stderr] 201 | pub options: Box Option>>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:327:5 [INFO] [stderr] | [INFO] [stderr] 327 | / match uri { [INFO] [stderr] 328 | | &RequestUri::AbsolutePath(ref s) => s.splitn(2, "?").next().unwrap_or("/").to_string(), [INFO] [stderr] 329 | | &RequestUri::AbsoluteUri(ref url) => url.path().to_string(), [INFO] [stderr] 330 | | _ => uri.to_string() [INFO] [stderr] 331 | | } [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] 327 | match *uri { [INFO] [stderr] 328 | RequestUri::AbsolutePath(ref s) => s.splitn(2, "?").next().unwrap_or("/").to_string(), [INFO] [stderr] 329 | RequestUri::AbsoluteUri(ref url) => url.path().to_string(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:328:57 [INFO] [stderr] | [INFO] [stderr] 328 | &RequestUri::AbsolutePath(ref s) => s.splitn(2, "?").next().unwrap_or("/").to_string(), [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:334:24 [INFO] [stderr] | [INFO] [stderr] 334 | fn sanitise_path(path: &String) -> Vec { [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: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:335:16 [INFO] [stderr] | [INFO] [stderr] 335 | path.split("/").filter(|p| !p.is_empty()).map(|p| p.to_string()).collect() [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/lib.rs:338:21 [INFO] [stderr] | [INFO] [stderr] 338 | fn join_paths(base: &Vec, path: &Vec) -> 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] 338 | fn join_paths(base: &[String], path: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] help: change `base.clone()` to [INFO] [stderr] | [INFO] [stderr] 339 | let mut paths = base.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/lib.rs:338:41 [INFO] [stderr] | [INFO] [stderr] 338 | fn join_paths(base: &Vec, path: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [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: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:346:33 [INFO] [stderr] | [INFO] [stderr] 346 | if new_path.starts_with("/") { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:419:9 [INFO] [stderr] | [INFO] [stderr] 419 | / match self { [INFO] [stderr] 420 | | &Decision::End(_) => true, [INFO] [stderr] 421 | | &Decision::A3Options => true, [INFO] [stderr] 422 | | _ => false [INFO] [stderr] 423 | | } [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] 419 | match *self { [INFO] [stderr] 420 | Decision::End(_) => true, [INFO] [stderr] 421 | Decision::A3Options => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/lib.rs:514:13 [INFO] [stderr] | [INFO] [stderr] 514 | / header_values.iter().find(|val| { [INFO] [stderr] 515 | | if val.value.starts_with("W/") { [INFO] [stderr] 516 | | val.weak_etag().unwrap() == etag [INFO] [stderr] 517 | | } else { [INFO] [stderr] 518 | | val.value == etag [INFO] [stderr] 519 | | } [INFO] [stderr] 520 | | }).is_some() [INFO] [stderr] | |________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/lib.rs:532:34 [INFO] [stderr] | [INFO] [stderr] 532 | *context_meta = Some(datetime.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `datetime` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:543:5 [INFO] [stderr] | [INFO] [stderr] 543 | / match decision { [INFO] [stderr] 544 | | &Decision::B10MethodAllowed => { [INFO] [stderr] 545 | | match resource.allowed_methods [INFO] [stderr] 546 | | .iter().find(|m| m.to_uppercase() == context.request.method.to_uppercase()) { [INFO] [stderr] ... | [INFO] [stderr] 716 | | _ => DecisionResult::False [INFO] [stderr] 717 | | } [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] 543 | match *decision { [INFO] [stderr] 544 | Decision::B10MethodAllowed => { [INFO] [stderr] 545 | match resource.allowed_methods [INFO] [stderr] 546 | .iter().find(|m| m.to_uppercase() == context.request.method.to_uppercase()) { [INFO] [stderr] 547 | Some(_) => DecisionResult::True, [INFO] [stderr] 548 | None => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/lib.rs:558:59 [INFO] [stderr] | [INFO] [stderr] 558 | &Decision::B12KnownMethod => DecisionResult::wrap(resource.known_methods [INFO] [stderr] | ___________________________________________________________^ [INFO] [stderr] 559 | | .iter().find(|m| m.to_uppercase() == context.request.method.to_uppercase()).is_some()), [INFO] [stderr] | |_________________________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: replace `find(|m| m.to_uppercase() == context.request.method.to_uppercase()).is_some()` with `any(|m| m.to_uppercase() == context.request.method.to_uppercase())` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:731:33 [INFO] [stderr] | [INFO] [stderr] 731 | Some(transition) => match transition { [INFO] [stderr] | _________________________________^ [INFO] [stderr] 732 | | &Transition::To(ref decision) => { [INFO] [stderr] 733 | | debug!("Transitioning to {:?}", decision); [INFO] [stderr] 734 | | decision.clone() [INFO] [stderr] ... | [INFO] [stderr] 755 | | } [INFO] [stderr] 756 | | }, [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] 731 | Some(transition) => match *transition { [INFO] [stderr] 732 | Transition::To(ref decision) => { [INFO] [stderr] 733 | debug!("Transitioning to {:?}", decision); [INFO] [stderr] 734 | decision.clone() [INFO] [stderr] 735 | }, [INFO] [stderr] 736 | Transition::Branch(ref decision_true, ref decision_false) => { [INFO] [stderr] | [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/lib.rs:769:13 [INFO] [stderr] | [INFO] [stderr] 769 | / match resource.options.as_ref()(context, resource) { [INFO] [stderr] 770 | | Some(headers) => context.response.add_headers(headers), [INFO] [stderr] 771 | | None => () [INFO] [stderr] 772 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Some(headers) = resource.options.as_ref()(context, resource) { context.response.add_headers(headers) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:778:74 [INFO] [stderr] | [INFO] [stderr] 778 | fn update_paths_for_resource(request: &mut WebmachineRequest, base_path: &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] 778 | fn update_paths_for_resource(request: &mut WebmachineRequest, base_path: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `base_path.clone()` to [INFO] [stderr] | [INFO] [stderr] 779 | request.base_path = base_path.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:783:32 [INFO] [stderr] | [INFO] [stderr] 783 | if subpath.starts_with("/") { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:834:26 [INFO] [stderr] | [INFO] [stderr] 834 | let media_type = match &context.selected_media_type { [INFO] [stderr] | __________________________^ [INFO] [stderr] 835 | | &Some(ref media_type) => media_type.clone(), [INFO] [stderr] 836 | | &None => s!("application/json") [INFO] [stderr] 837 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 834 | let media_type = match context.selected_media_type { [INFO] [stderr] 835 | Some(ref media_type) => media_type.clone(), [INFO] [stderr] 836 | None => s!("application/json") [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:838:23 [INFO] [stderr] | [INFO] [stderr] 838 | let charset = match &context.selected_charset { [INFO] [stderr] | _______________________^ [INFO] [stderr] 839 | | &Some(ref charset) => charset.clone(), [INFO] [stderr] 840 | | &None => s!("ISO-8859-1") [INFO] [stderr] 841 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 838 | let charset = match context.selected_charset { [INFO] [stderr] 839 | Some(ref charset) => charset.clone(), [INFO] [stderr] 840 | None => s!("ISO-8859-1") [INFO] [stderr] | [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/lib.rs:877:9 [INFO] [stderr] | [INFO] [stderr] 877 | / match resource.generate_etag.as_ref()(context) { [INFO] [stderr] 878 | | Some(etag) => context.response.add_header(s!("ETag"), vec![HeaderValue::basic(&etag).quote()]), [INFO] [stderr] 879 | | None => () [INFO] [stderr] 880 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(etag) = resource.generate_etag.as_ref()(context) { context.response.add_header(s!("ETag"), vec![HeaderValue::basic(&etag).quote()]) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lib.rs:881:9 [INFO] [stderr] | [INFO] [stderr] 881 | / match resource.expires.as_ref()(context) { [INFO] [stderr] 882 | | Some(datetime) => context.response.add_header(s!("Expires"), [INFO] [stderr] 883 | | vec![HeaderValue::basic(&datetime.to_rfc2822()).quote()]), [INFO] [stderr] 884 | | None => () [INFO] [stderr] 885 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 881 | if let Some(datetime) = resource.expires.as_ref()(context) { context.response.add_header(s!("Expires"), [INFO] [stderr] 882 | vec![HeaderValue::basic(&datetime.to_rfc2822()).quote()]) } [INFO] [stderr] | [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/lib.rs:886:9 [INFO] [stderr] | [INFO] [stderr] 886 | / match resource.last_modified.as_ref()(context) { [INFO] [stderr] 887 | | Some(datetime) => context.response.add_header(s!("Last-Modified"), [INFO] [stderr] 888 | | vec![HeaderValue::basic(&datetime.to_rfc2822()).quote()]), [INFO] [stderr] 889 | | None => () [INFO] [stderr] 890 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 886 | if let Some(datetime) = resource.last_modified.as_ref()(context) { context.response.add_header(s!("Last-Modified"), [INFO] [stderr] 887 | vec![HeaderValue::basic(&datetime.to_rfc2822()).quote()]) } [INFO] [stderr] | [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/lib.rs:894:9 [INFO] [stderr] | [INFO] [stderr] 894 | / match resource.render_response.as_ref()(context) { [INFO] [stderr] 895 | | Some(body) => context.response.body = Some(body), [INFO] [stderr] 896 | | None => () [INFO] [stderr] 897 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(body) = resource.render_response.as_ref()(context) { context.response.body = Some(body) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:900:5 [INFO] [stderr] | [INFO] [stderr] 900 | / match &resource.finalise_response { [INFO] [stderr] 901 | | &Some(ref callback) => callback.as_ref()(context), [INFO] [stderr] 902 | | &None => () [INFO] [stderr] 903 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 900 | match resource.finalise_response { [INFO] [stderr] 901 | Some(ref callback) => callback.as_ref()(context), [INFO] [stderr] 902 | None => () [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:962:37 [INFO] [stderr] | [INFO] [stderr] 962 | fn lookup_resource(&self, path: &String) -> Arc { [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: variable does not need to be mutable [INFO] [stderr] --> src/headers.rs:13:34 [INFO] [stderr] | [INFO] [stderr] 13 | values.into_iter().batching(|mut it| { [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/headers.rs:13:12 [INFO] [stderr] | [INFO] [stderr] 13 | values.into_iter().batching(|mut it| { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/headers.rs:153:21 [INFO] [stderr] | [INFO] [stderr] 153 | pub fn basic(s: &String) -> HeaderValue { [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] 153 | pub fn basic(s: &str) -> HeaderValue { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `s.clone()` to [INFO] [stderr] | [INFO] [stderr] 155 | value: s.to_string(), [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/context.rs:39:35 [INFO] [stderr] | [INFO] [stderr] 39 | Some(header) => match self.headers.get(header).unwrap().first() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.headers[header]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/context.rs:123:38 [INFO] [stderr] | [INFO] [stderr] 123 | pub fn has_header(&self, header: &String) -> bool { [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: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/context.rs:124:9 [INFO] [stderr] | [INFO] [stderr] 124 | self.headers.keys().find(|k| k.to_uppercase() == header.to_uppercase()).is_some() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = note: replace `find(|k| k.to_uppercase() == header.to_uppercase()).is_some()` with `any(|k| k.to_uppercase() == header.to_uppercase())` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/context.rs:129:39 [INFO] [stderr] | [INFO] [stderr] 129 | pub fn find_header(&self, header: &String) -> Vec { [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/context.rs:131:29 [INFO] [stderr] | [INFO] [stderr] 131 | Some(header) => self.headers.get(header).unwrap().clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.headers[header]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/context.rs:137:44 [INFO] [stderr] | [INFO] [stderr] 137 | pub fn has_header_value(&self, header: &String, value: &String) -> bool { [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/context.rs:137:60 [INFO] [stderr] | [INFO] [stderr] 137 | pub fn has_header_value(&self, header: &String, value: &String) -> bool { [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: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/context.rs:139:29 [INFO] [stderr] | [INFO] [stderr] 139 | Some(header) => match self.headers.get(header).unwrap().iter().find(|val| *val == value) { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 140 | | Some(_) => true, [INFO] [stderr] 141 | | None => false [INFO] [stderr] 142 | | }, [INFO] [stderr] | |_____________^ help: try this: `self.headers.get(header).unwrap().iter().find(|val| *val == value).is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/context.rs:139:35 [INFO] [stderr] | [INFO] [stderr] 139 | Some(header) => match self.headers.get(header).unwrap().iter().find(|val| *val == value) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.headers[header]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/context.rs:170:38 [INFO] [stderr] | [INFO] [stderr] 170 | pub fn has_header(&self, header: &String) -> bool { [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: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/context.rs:171:9 [INFO] [stderr] | [INFO] [stderr] 171 | self.headers.keys().find(|k| k.to_uppercase() == header.to_uppercase()).is_some() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: replace `find(|k| k.to_uppercase() == header.to_uppercase()).is_some()` with `any(|k| k.to_uppercase() == header.to_uppercase())` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/context.rs:187:57 [INFO] [stderr] | [INFO] [stderr] 187 | pub fn add_cors_headers(&mut self, allowed_methods: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [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 `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/context.rs:195:42 [INFO] [stderr] | [INFO] [stderr] 195 | pub fn cors_headers(allowed_methods: &Vec) -> HashMap> { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [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: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/context.rs:205:9 [INFO] [stderr] | [INFO] [stderr] 205 | / match &self.body { [INFO] [stderr] 206 | | &None => false, [INFO] [stderr] 207 | | &Some(ref body) => !body.is_empty() [INFO] [stderr] 208 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 205 | match self.body { [INFO] [stderr] 206 | None => false, [INFO] [stderr] 207 | Some(ref body) => !body.is_empty() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/content_negotiation.rs:36:37 [INFO] [stderr] | [INFO] [stderr] 36 | pub fn parse_string(media_type: &String) -> MediaType { [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/content_negotiation.rs:54:39 [INFO] [stderr] | [INFO] [stderr] 54 | pub fn with_weight(&self, weight: &String) -> MediaType { [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/content_negotiation.rs:96:62 [INFO] [stderr] | [INFO] [stderr] 96 | MediaType::parse_string(&self.value).with_weight(self.params.get(&s!("q")).unwrap()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.params[&s!("q")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/content_negotiation.rs:104:38 [INFO] [stderr] | [INFO] [stderr] 104 | pub fn sort_media_types(media_types: &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: change this to: `&[HeaderValue]` [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: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/content_negotiation.rs:105:17 [INFO] [stderr] | [INFO] [stderr] 105 | media_types.into_iter().cloned().sorted_by(|a, b| { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/content_negotiation.rs:122:9 [INFO] [stderr] | [INFO] [stderr] 122 | / resource.produces.iter() [INFO] [stderr] 123 | | .cloned() [INFO] [stderr] 124 | | .cartesian_product(acceptable_media_types.iter()) [INFO] [stderr] 125 | | .map(|(produced, acceptable)| { [INFO] [stderr] ... | [INFO] [stderr] 132 | | .filter(|val| val.2 != MediaTypeMatch::None) [INFO] [stderr] 133 | | .next().map(|result| result.0.to_string()) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::filter_next)] on by default [INFO] [stderr] = note: replace `filter(|val| val.2 != MediaTypeMatch::None).next()` with `find(|val| val.2 != MediaTypeMatch::None)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/content_negotiation.rs:152:35 [INFO] [stderr] | [INFO] [stderr] 152 | pub fn parse_string(language: &String) -> MediaLanguage { [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/content_negotiation.rs:170:39 [INFO] [stderr] | [INFO] [stderr] 170 | pub fn with_weight(&self, weight: &String) -> MediaLanguage { [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/content_negotiation.rs:202:66 [INFO] [stderr] | [INFO] [stderr] 202 | MediaLanguage::parse_string(&self.value).with_weight(self.params.get(&s!("q")).unwrap()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.params[&s!("q")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/content_negotiation.rs:210:46 [INFO] [stderr] | [INFO] [stderr] 210 | pub fn sort_media_languages(media_languages: &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: change this to: `&[HeaderValue]` [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: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/content_negotiation.rs:211:21 [INFO] [stderr] | [INFO] [stderr] 211 | media_languages.into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/content_negotiation.rs:257:34 [INFO] [stderr] | [INFO] [stderr] 257 | pub fn parse_string(charset: &String) -> Charset { [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] 257 | pub fn parse_string(charset: &str) -> Charset { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `charset.clone()` to [INFO] [stderr] | [INFO] [stderr] 259 | charset: charset.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/content_negotiation.rs:265:39 [INFO] [stderr] | [INFO] [stderr] 265 | pub fn with_weight(&self, weight: &String) -> Charset { [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/content_negotiation.rs:287:60 [INFO] [stderr] | [INFO] [stderr] 287 | Charset::parse_string(&self.value).with_weight(self.params.get(&s!("q")).unwrap()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.params[&s!("q")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/content_negotiation.rs:296:38 [INFO] [stderr] | [INFO] [stderr] 296 | pub fn sort_media_charsets(charsets: &Vec) -> Vec { [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] 296 | pub fn sort_media_charsets(charsets: &[HeaderValue]) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] help: change `charsets.clone()` to [INFO] [stderr] | [INFO] [stderr] 297 | let mut charsets = charsets.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/content_negotiation.rs:346:35 [INFO] [stderr] | [INFO] [stderr] 346 | pub fn parse_string(encoding: &String) -> Encoding { [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] 346 | pub fn parse_string(encoding: &str) -> Encoding { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `encoding.clone()` to [INFO] [stderr] | [INFO] [stderr] 348 | encoding: 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/content_negotiation.rs:354:39 [INFO] [stderr] | [INFO] [stderr] 354 | pub fn with_weight(&self, weight: &String) -> Encoding { [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/content_negotiation.rs:376:61 [INFO] [stderr] | [INFO] [stderr] 376 | Encoding::parse_string(&self.value).with_weight(self.params.get(&s!("q")).unwrap()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.params[&s!("q")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/content_negotiation.rs:385:34 [INFO] [stderr] | [INFO] [stderr] 385 | pub fn sort_encodings(encodings: &Vec) -> Vec { [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] 385 | pub fn sort_encodings(encodings: &[HeaderValue]) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] help: change `encodings.clone()` to [INFO] [stderr] | [INFO] [stderr] 386 | let mut encodings = encodings.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/lib.rs:201:18 [INFO] [stderr] | [INFO] [stderr] 201 | pub options: Box Option>>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:327:5 [INFO] [stderr] | [INFO] [stderr] 327 | / match uri { [INFO] [stderr] 328 | | &RequestUri::AbsolutePath(ref s) => s.splitn(2, "?").next().unwrap_or("/").to_string(), [INFO] [stderr] 329 | | &RequestUri::AbsoluteUri(ref url) => url.path().to_string(), [INFO] [stderr] 330 | | _ => uri.to_string() [INFO] [stderr] 331 | | } [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] 327 | match *uri { [INFO] [stderr] 328 | RequestUri::AbsolutePath(ref s) => s.splitn(2, "?").next().unwrap_or("/").to_string(), [INFO] [stderr] 329 | RequestUri::AbsoluteUri(ref url) => url.path().to_string(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:328:57 [INFO] [stderr] | [INFO] [stderr] 328 | &RequestUri::AbsolutePath(ref s) => s.splitn(2, "?").next().unwrap_or("/").to_string(), [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:334:24 [INFO] [stderr] | [INFO] [stderr] 334 | fn sanitise_path(path: &String) -> Vec { [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: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:335:16 [INFO] [stderr] | [INFO] [stderr] 335 | path.split("/").filter(|p| !p.is_empty()).map(|p| p.to_string()).collect() [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/lib.rs:338:21 [INFO] [stderr] | [INFO] [stderr] 338 | fn join_paths(base: &Vec, path: &Vec) -> 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] 338 | fn join_paths(base: &[String], path: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] help: change `base.clone()` to [INFO] [stderr] | [INFO] [stderr] 339 | let mut paths = base.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/lib.rs:338:41 [INFO] [stderr] | [INFO] [stderr] 338 | fn join_paths(base: &Vec, path: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [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: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:346:33 [INFO] [stderr] | [INFO] [stderr] 346 | if new_path.starts_with("/") { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:419:9 [INFO] [stderr] | [INFO] [stderr] 419 | / match self { [INFO] [stderr] 420 | | &Decision::End(_) => true, [INFO] [stderr] 421 | | &Decision::A3Options => true, [INFO] [stderr] 422 | | _ => false [INFO] [stderr] 423 | | } [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] 419 | match *self { [INFO] [stderr] 420 | Decision::End(_) => true, [INFO] [stderr] 421 | Decision::A3Options => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/lib.rs:514:13 [INFO] [stderr] | [INFO] [stderr] 514 | / header_values.iter().find(|val| { [INFO] [stderr] 515 | | if val.value.starts_with("W/") { [INFO] [stderr] 516 | | val.weak_etag().unwrap() == etag [INFO] [stderr] 517 | | } else { [INFO] [stderr] 518 | | val.value == etag [INFO] [stderr] 519 | | } [INFO] [stderr] 520 | | }).is_some() [INFO] [stderr] | |________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/lib.rs:532:34 [INFO] [stderr] | [INFO] [stderr] 532 | *context_meta = Some(datetime.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `datetime` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:543:5 [INFO] [stderr] | [INFO] [stderr] 543 | / match decision { [INFO] [stderr] 544 | | &Decision::B10MethodAllowed => { [INFO] [stderr] 545 | | match resource.allowed_methods [INFO] [stderr] 546 | | .iter().find(|m| m.to_uppercase() == context.request.method.to_uppercase()) { [INFO] [stderr] ... | [INFO] [stderr] 716 | | _ => DecisionResult::False [INFO] [stderr] 717 | | } [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] 543 | match *decision { [INFO] [stderr] 544 | Decision::B10MethodAllowed => { [INFO] [stderr] 545 | match resource.allowed_methods [INFO] [stderr] 546 | .iter().find(|m| m.to_uppercase() == context.request.method.to_uppercase()) { [INFO] [stderr] 547 | Some(_) => DecisionResult::True, [INFO] [stderr] 548 | None => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/lib.rs:558:59 [INFO] [stderr] | [INFO] [stderr] 558 | &Decision::B12KnownMethod => DecisionResult::wrap(resource.known_methods [INFO] [stderr] | ___________________________________________________________^ [INFO] [stderr] 559 | | .iter().find(|m| m.to_uppercase() == context.request.method.to_uppercase()).is_some()), [INFO] [stderr] | |_________________________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: replace `find(|m| m.to_uppercase() == context.request.method.to_uppercase()).is_some()` with `any(|m| m.to_uppercase() == context.request.method.to_uppercase())` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:731:33 [INFO] [stderr] | [INFO] [stderr] 731 | Some(transition) => match transition { [INFO] [stderr] | _________________________________^ [INFO] [stderr] 732 | | &Transition::To(ref decision) => { [INFO] [stderr] 733 | | debug!("Transitioning to {:?}", decision); [INFO] [stderr] 734 | | decision.clone() [INFO] [stderr] ... | [INFO] [stderr] 755 | | } [INFO] [stderr] 756 | | }, [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] 731 | Some(transition) => match *transition { [INFO] [stderr] 732 | Transition::To(ref decision) => { [INFO] [stderr] 733 | debug!("Transitioning to {:?}", decision); [INFO] [stderr] 734 | decision.clone() [INFO] [stderr] 735 | }, [INFO] [stderr] 736 | Transition::Branch(ref decision_true, ref decision_false) => { [INFO] [stderr] | [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/lib.rs:769:13 [INFO] [stderr] | [INFO] [stderr] 769 | / match resource.options.as_ref()(context, resource) { [INFO] [stderr] 770 | | Some(headers) => context.response.add_headers(headers), [INFO] [stderr] 771 | | None => () [INFO] [stderr] 772 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Some(headers) = resource.options.as_ref()(context, resource) { context.response.add_headers(headers) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:778:74 [INFO] [stderr] | [INFO] [stderr] 778 | fn update_paths_for_resource(request: &mut WebmachineRequest, base_path: &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] 778 | fn update_paths_for_resource(request: &mut WebmachineRequest, base_path: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `base_path.clone()` to [INFO] [stderr] | [INFO] [stderr] 779 | request.base_path = base_path.to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:783:32 [INFO] [stderr] | [INFO] [stderr] 783 | if subpath.starts_with("/") { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:834:26 [INFO] [stderr] | [INFO] [stderr] 834 | let media_type = match &context.selected_media_type { [INFO] [stderr] | __________________________^ [INFO] [stderr] 835 | | &Some(ref media_type) => media_type.clone(), [INFO] [stderr] 836 | | &None => s!("application/json") [INFO] [stderr] 837 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 834 | let media_type = match context.selected_media_type { [INFO] [stderr] 835 | Some(ref media_type) => media_type.clone(), [INFO] [stderr] 836 | None => s!("application/json") [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:838:23 [INFO] [stderr] | [INFO] [stderr] 838 | let charset = match &context.selected_charset { [INFO] [stderr] | _______________________^ [INFO] [stderr] 839 | | &Some(ref charset) => charset.clone(), [INFO] [stderr] 840 | | &None => s!("ISO-8859-1") [INFO] [stderr] 841 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 838 | let charset = match context.selected_charset { [INFO] [stderr] 839 | Some(ref charset) => charset.clone(), [INFO] [stderr] 840 | None => s!("ISO-8859-1") [INFO] [stderr] | [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/lib.rs:877:9 [INFO] [stderr] | [INFO] [stderr] 877 | / match resource.generate_etag.as_ref()(context) { [INFO] [stderr] 878 | | Some(etag) => context.response.add_header(s!("ETag"), vec![HeaderValue::basic(&etag).quote()]), [INFO] [stderr] 879 | | None => () [INFO] [stderr] 880 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(etag) = resource.generate_etag.as_ref()(context) { context.response.add_header(s!("ETag"), vec![HeaderValue::basic(&etag).quote()]) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lib.rs:881:9 [INFO] [stderr] | [INFO] [stderr] 881 | / match resource.expires.as_ref()(context) { [INFO] [stderr] 882 | | Some(datetime) => context.response.add_header(s!("Expires"), [INFO] [stderr] 883 | | vec![HeaderValue::basic(&datetime.to_rfc2822()).quote()]), [INFO] [stderr] 884 | | None => () [INFO] [stderr] 885 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 881 | if let Some(datetime) = resource.expires.as_ref()(context) { context.response.add_header(s!("Expires"), [INFO] [stderr] 882 | vec![HeaderValue::basic(&datetime.to_rfc2822()).quote()]) } [INFO] [stderr] | [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/lib.rs:886:9 [INFO] [stderr] | [INFO] [stderr] 886 | / match resource.last_modified.as_ref()(context) { [INFO] [stderr] 887 | | Some(datetime) => context.response.add_header(s!("Last-Modified"), [INFO] [stderr] 888 | | vec![HeaderValue::basic(&datetime.to_rfc2822()).quote()]), [INFO] [stderr] 889 | | None => () [INFO] [stderr] 890 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 886 | if let Some(datetime) = resource.last_modified.as_ref()(context) { context.response.add_header(s!("Last-Modified"), [INFO] [stderr] 887 | vec![HeaderValue::basic(&datetime.to_rfc2822()).quote()]) } [INFO] [stderr] | [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/lib.rs:894:9 [INFO] [stderr] | [INFO] [stderr] 894 | / match resource.render_response.as_ref()(context) { [INFO] [stderr] 895 | | Some(body) => context.response.body = Some(body), [INFO] [stderr] 896 | | None => () [INFO] [stderr] 897 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(body) = resource.render_response.as_ref()(context) { context.response.body = Some(body) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:900:5 [INFO] [stderr] | [INFO] [stderr] 900 | / match &resource.finalise_response { [INFO] [stderr] 901 | | &Some(ref callback) => callback.as_ref()(context), [INFO] [stderr] 902 | | &None => () [INFO] [stderr] 903 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 900 | match resource.finalise_response { [INFO] [stderr] 901 | Some(ref callback) => callback.as_ref()(context), [INFO] [stderr] 902 | None => () [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:962:37 [INFO] [stderr] | [INFO] [stderr] 962 | fn lookup_resource(&self, path: &String) -> Arc { [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: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/tests.rs:154:12 [INFO] [stderr] | [INFO] [stderr] 154 | expect(context.response.headers.get(&s!("Allow")).unwrap().clone()).to(be_equal_to(vec![ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&context.response.headers[&s!("Allow")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/tests.rs:181:12 [INFO] [stderr] | [INFO] [stderr] 181 | expect(context.response.headers.get(&s!("WWW-Authenticate")).unwrap().clone()).to(be_equal_to(vec![ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&context.response.headers[&s!("WWW-Authenticate")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/tests.rs:315:12 [INFO] [stderr] | [INFO] [stderr] 315 | expect(context.response.headers.get(&s!("A")).unwrap().clone()).to(be_equal_to(vec![s!("B")])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&context.response.headers[&s!("A")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/tests.rs:316:12 [INFO] [stderr] | [INFO] [stderr] 316 | expect(context.response.headers.get(&s!("C")).unwrap().clone()).to(be_equal_to(vec![s!("D;E=F")])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&context.response.headers[&s!("C")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/tests.rs:356:12 [INFO] [stderr] | [INFO] [stderr] 356 | expect(context.response.headers.get(&s!("Content-Type")).unwrap()).to(be_equal_to(&vec![h!("application/xml;charset=ISO-8859-1")])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&context.response.headers[&s!("Content-Type")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/tests.rs:435:12 [INFO] [stderr] | [INFO] [stderr] 435 | expect(context.response.headers.get(&s!("Content-Type")).unwrap()).to(be_equal_to(&vec![h!("application/json;charset=UTF-8")])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&context.response.headers[&s!("Content-Type")]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 17.72s [INFO] running `"docker" "inspect" "4682e82ebc3235e65b1c32bdb45e853e36ab8cbe78f3a5585e6822bd23bc456d"` [INFO] running `"docker" "rm" "-f" "4682e82ebc3235e65b1c32bdb45e853e36ab8cbe78f3a5585e6822bd23bc456d"` [INFO] [stdout] 4682e82ebc3235e65b1c32bdb45e853e36ab8cbe78f3a5585e6822bd23bc456d