[INFO] crate weldmock 0.0.1-alpha.5 is already in cache [INFO] extracting crate weldmock 0.0.1-alpha.5 into work/ex/clippy-test-run/sources/stable/reg/weldmock/0.0.1-alpha.5 [INFO] extracting crate weldmock 0.0.1-alpha.5 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/weldmock/0.0.1-alpha.5 [INFO] validating manifest of weldmock-0.0.1-alpha.5 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 weldmock-0.0.1-alpha.5 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 weldmock-0.0.1-alpha.5 [INFO] finished frobbing weldmock-0.0.1-alpha.5 [INFO] frobbed toml for weldmock-0.0.1-alpha.5 written to work/ex/clippy-test-run/sources/stable/reg/weldmock/0.0.1-alpha.5/Cargo.toml [INFO] started frobbing weldmock-0.0.1-alpha.5 [INFO] finished frobbing weldmock-0.0.1-alpha.5 [INFO] frobbed toml for weldmock-0.0.1-alpha.5 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/weldmock/0.0.1-alpha.5/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 weldmock-0.0.1-alpha.5 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/weldmock/0.0.1-alpha.5:/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] 769a2e9b6bcdefe01e2444981ab0576b8b92e05a0e78d4b79effb9fefebc5470 [INFO] running `"docker" "start" "-a" "769a2e9b6bcdefe01e2444981ab0576b8b92e05a0e78d4b79effb9fefebc5470"` [INFO] [stderr] Checking slog-async v2.3.0 [INFO] [stderr] Checking weldmock v0.0.1-alpha.5 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/service/query_api/mod.rs:33:29 [INFO] [stderr] | [INFO] [stderr] 33 | key: key, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `key` [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/service/query_api/mod.rs:34:29 [INFO] [stderr] | [INFO] [stderr] 34 | value: value, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [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/service/query_api/mod.rs:33:29 [INFO] [stderr] | [INFO] [stderr] 33 | key: key, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `key` [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/service/query_api/mod.rs:34:29 [INFO] [stderr] | [INFO] [stderr] 34 | value: value, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [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: unneeded return statement [INFO] [stderr] --> src/service/mod.rs:39:27 [INFO] [stderr] | [INFO] [stderr] 39 | Ok(record) => return utils::success(response, StatusCode::Ok, &record), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `utils::success(response, StatusCode::Ok, &record)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/service/mod.rs:86:25 [INFO] [stderr] | [INFO] [stderr] 86 | return utils::success(response, StatusCode::Ok, &record); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `utils::success(response, StatusCode::Ok, &record)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/service/mod.rs:114:17 [INFO] [stderr] | [INFO] [stderr] 114 | return utils::success(response, StatusCode::Ok, &record); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `utils::success(response, StatusCode::Ok, &record)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/database/read.rs:39:17 [INFO] [stderr] | [INFO] [stderr] 39 | return Ok(obj.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(obj.clone())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/database/query_api/filter.rs:40:28 [INFO] [stderr] | [INFO] [stderr] 40 | &Value::Bool(_) => return serde_json::to_value(query_value == "true"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `serde_json::to_value(query_value == "true")` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/database/query_api/filter.rs:41:30 [INFO] [stderr] | [INFO] [stderr] 41 | &Value::Number(_) => return serde_json::to_value(i64::from_str_radix(query_value, 10).ok()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `serde_json::to_value(i64::from_str_radix(query_value, 10).ok())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/database/query_api/filter.rs:42:30 [INFO] [stderr] | [INFO] [stderr] 42 | &Value::String(_) => return serde_json::to_value(query_value), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `serde_json::to_value(query_value)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/database/query_api/sort.rs:63:12 [INFO] [stderr] | [INFO] [stderr] 63 | } else { [INFO] [stderr] | ____________^ [INFO] [stderr] 64 | | if let Some(_) = b.get(sort_key) { [INFO] [stderr] 65 | | Ordering::Less [INFO] [stderr] 66 | | } else { [INFO] [stderr] 67 | | Ordering::Equal [INFO] [stderr] 68 | | } [INFO] [stderr] 69 | | } [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] 63 | } else if let Some(_) = b.get(sort_key) { [INFO] [stderr] 64 | Ordering::Less [INFO] [stderr] 65 | } else { [INFO] [stderr] 66 | Ordering::Equal [INFO] [stderr] 67 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/database/errors.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | return Err(error); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(error)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/database/mod.rs:119:17 [INFO] [stderr] | [INFO] [stderr] 119 | return Err(Errors::NotFound(format!("Read - Error path: {:?} ", &key))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(Errors::NotFound(format!("Read - Error path: {:?} ", &key)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/service/mod.rs:39:27 [INFO] [stderr] | [INFO] [stderr] 39 | Ok(record) => return utils::success(response, StatusCode::Ok, &record), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `utils::success(response, StatusCode::Ok, &record)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/service/mod.rs:86:25 [INFO] [stderr] | [INFO] [stderr] 86 | return utils::success(response, StatusCode::Ok, &record); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `utils::success(response, StatusCode::Ok, &record)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/service/mod.rs:114:17 [INFO] [stderr] | [INFO] [stderr] 114 | return utils::success(response, StatusCode::Ok, &record); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `utils::success(response, StatusCode::Ok, &record)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/database/read.rs:39:17 [INFO] [stderr] | [INFO] [stderr] 39 | return Ok(obj.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(obj.clone())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/database/query_api/filter.rs:40:28 [INFO] [stderr] | [INFO] [stderr] 40 | &Value::Bool(_) => return serde_json::to_value(query_value == "true"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `serde_json::to_value(query_value == "true")` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/database/query_api/filter.rs:41:30 [INFO] [stderr] | [INFO] [stderr] 41 | &Value::Number(_) => return serde_json::to_value(i64::from_str_radix(query_value, 10).ok()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `serde_json::to_value(i64::from_str_radix(query_value, 10).ok())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/database/query_api/filter.rs:42:30 [INFO] [stderr] | [INFO] [stderr] 42 | &Value::String(_) => return serde_json::to_value(query_value), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `serde_json::to_value(query_value)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/database/query_api/sort.rs:63:12 [INFO] [stderr] | [INFO] [stderr] 63 | } else { [INFO] [stderr] | ____________^ [INFO] [stderr] 64 | | if let Some(_) = b.get(sort_key) { [INFO] [stderr] 65 | | Ordering::Less [INFO] [stderr] 66 | | } else { [INFO] [stderr] 67 | | Ordering::Equal [INFO] [stderr] 68 | | } [INFO] [stderr] 69 | | } [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] 63 | } else if let Some(_) = b.get(sort_key) { [INFO] [stderr] 64 | Ordering::Less [INFO] [stderr] 65 | } else { [INFO] [stderr] 66 | Ordering::Equal [INFO] [stderr] 67 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/database/errors.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | return Err(error); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(error)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/database/mod.rs:119:17 [INFO] [stderr] | [INFO] [stderr] 119 | return Err(Errors::NotFound(format!("Read - Error path: {:?} ", &key))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(Errors::NotFound(format!("Read - Error path: {:?} ", &key)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/service/utils.rs:44:16 [INFO] [stderr] | [INFO] [stderr] 44 | path.split("/") [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/query_api/sort.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | / match self { [INFO] [stderr] 18 | | &Sort::ASC(ref s_name) => { [INFO] [stderr] 19 | | match other { [INFO] [stderr] 20 | | &Sort::ASC(ref o_name) => s_name == o_name, [INFO] [stderr] ... | [INFO] [stderr] 29 | | } [INFO] [stderr] 30 | | } [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] 17 | match *self { [INFO] [stderr] 18 | Sort::ASC(ref s_name) => { [INFO] [stderr] 19 | match other { [INFO] [stderr] 20 | &Sort::ASC(ref o_name) => s_name == o_name, [INFO] [stderr] 21 | &Sort::DSC(_) => false, [INFO] [stderr] 22 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/query_api/sort.rs:19:17 [INFO] [stderr] | [INFO] [stderr] 19 | / match other { [INFO] [stderr] 20 | | &Sort::ASC(ref o_name) => s_name == o_name, [INFO] [stderr] 21 | | &Sort::DSC(_) => false, [INFO] [stderr] 22 | | } [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] 19 | match *other { [INFO] [stderr] 20 | Sort::ASC(ref o_name) => s_name == o_name, [INFO] [stderr] 21 | Sort::DSC(_) => false, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/query_api/sort.rs:25:17 [INFO] [stderr] | [INFO] [stderr] 25 | / match other { [INFO] [stderr] 26 | | &Sort::ASC(_) => false, [INFO] [stderr] 27 | | &Sort::DSC(ref o_name) => s_name == o_name, [INFO] [stderr] 28 | | } [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] 25 | match *other { [INFO] [stderr] 26 | Sort::ASC(_) => false, [INFO] [stderr] 27 | Sort::DSC(ref o_name) => s_name == o_name, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/query_api/page.rs:16:9 [INFO] [stderr] | [INFO] [stderr] 16 | / match self { [INFO] [stderr] 17 | | &Page::OFFSET(s_size) => { [INFO] [stderr] 18 | | match other { [INFO] [stderr] 19 | | &Page::OFFSET(o_size) => s_size == o_size, [INFO] [stderr] ... | [INFO] [stderr] 28 | | } [INFO] [stderr] 29 | | } [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] 16 | match *self { [INFO] [stderr] 17 | Page::OFFSET(s_size) => { [INFO] [stderr] 18 | match other { [INFO] [stderr] 19 | &Page::OFFSET(o_size) => s_size == o_size, [INFO] [stderr] 20 | &Page::LIMIT(_) => false, [INFO] [stderr] 21 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/query_api/page.rs:18:17 [INFO] [stderr] | [INFO] [stderr] 18 | / match other { [INFO] [stderr] 19 | | &Page::OFFSET(o_size) => s_size == o_size, [INFO] [stderr] 20 | | &Page::LIMIT(_) => false, [INFO] [stderr] 21 | | } [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] 18 | match *other { [INFO] [stderr] 19 | Page::OFFSET(o_size) => s_size == o_size, [INFO] [stderr] 20 | Page::LIMIT(_) => false, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/query_api/page.rs:24:17 [INFO] [stderr] | [INFO] [stderr] 24 | / match other { [INFO] [stderr] 25 | | &Page::OFFSET(_) => false, [INFO] [stderr] 26 | | &Page::LIMIT(o_size) => s_size == o_size, [INFO] [stderr] 27 | | } [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] 24 | match *other { [INFO] [stderr] 25 | Page::OFFSET(_) => false, [INFO] [stderr] 26 | Page::LIMIT(o_size) => s_size == o_size, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/service/query_api/mod.rs:16:39 [INFO] [stderr] | [INFO] [stderr] 16 | for param in params.split("&") { [INFO] [stderr] | ^^^ help: try using a char instead: `'&'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/service/query_api/mod.rs:21:45 [INFO] [stderr] | [INFO] [stderr] 21 | let parts = param.splitn(2, "=").collect::>(); [INFO] [stderr] | ^^^ help: try using a char instead: `'='` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/service/query_api/mod.rs:26:27 [INFO] [stderr] | [INFO] [stderr] 26 | let key = parts.get(0).unwrap().to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `&parts[0]` [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: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/service/query_api/mod.rs:27:29 [INFO] [stderr] | [INFO] [stderr] 27 | let value = parts.get(1).unwrap().to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `&parts[1]` [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: single-character string constant used as pattern [INFO] [stderr] --> src/service/query_api/mod.rs:28:36 [INFO] [stderr] | [INFO] [stderr] 28 | if key.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: single-character string constant used as pattern [INFO] [stderr] --> src/service/query_api/mod.rs:52:28 [INFO] [stderr] | [INFO] [stderr] 52 | .split(",") [INFO] [stderr] | ^^^ help: try using a char instead: `','` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/service/query_api/mod.rs:69:43 [INFO] [stderr] | [INFO] [stderr] 69 | sort_vet.extend(q.value.split(",").map(Sort::from).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: single-character string constant used as pattern [INFO] [stderr] --> src/service/query_api/mod.rs:74:45 [INFO] [stderr] | [INFO] [stderr] 74 | filter_vet.extend(q.value.split(",").map(Query::from).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: you should consider adding a `Default` implementation for `service::query_api::Queries` [INFO] [stderr] --> src/service/query_api/mod.rs:104:5 [INFO] [stderr] | [INFO] [stderr] 104 | / pub fn new() -> Queries { [INFO] [stderr] 105 | | Queries { [INFO] [stderr] 106 | | fields: Vec::::new(), [INFO] [stderr] 107 | | filter: Vec::::new(), [INFO] [stderr] ... | [INFO] [stderr] 112 | | } [INFO] [stderr] 113 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 102 | impl Default for service::query_api::Queries { [INFO] [stderr] 103 | fn default() -> Self { [INFO] [stderr] 104 | Self::new() [INFO] [stderr] 105 | } [INFO] [stderr] 106 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/mod.rs:150:13 [INFO] [stderr] | [INFO] [stderr] 150 | / match req.method() { [INFO] [stderr] 151 | | &Get => { [INFO] [stderr] 152 | | let queries = query_api::parse(req.query()); [INFO] [stderr] 153 | | Self::get(path_parts, queries, response) [INFO] [stderr] ... | [INFO] [stderr] 158 | | _ => utils::error(response, StatusCode::MethodNotAllowed, "Method Not Allowed"), [INFO] [stderr] 159 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 150 | match *req.method() { [INFO] [stderr] 151 | Get => { [INFO] [stderr] 152 | let queries = query_api::parse(req.query()); [INFO] [stderr] 153 | Self::get(path_parts, queries, response) [INFO] [stderr] 154 | } [INFO] [stderr] 155 | Post => Self::post(req, path_parts, response), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `configuration::Configuration` [INFO] [stderr] --> src/configuration.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | / pub fn new() -> Configuration { [INFO] [stderr] 23 | | Configuration { [INFO] [stderr] 24 | | database: Database { [INFO] [stderr] 25 | | path: "db.json".to_string(), [INFO] [stderr] ... | [INFO] [stderr] 32 | | } [INFO] [stderr] 33 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 20 | impl Default for configuration::Configuration { [INFO] [stderr] 21 | fn default() -> Self { [INFO] [stderr] 22 | Self::new() [INFO] [stderr] 23 | } [INFO] [stderr] 24 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/update.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | / match obj { [INFO] [stderr] 14 | | &mut Value::Object(ref mut map) => { [INFO] [stderr] 15 | | // let id = map.get("id").clone(); [INFO] [stderr] 16 | | if let Value::Object(value_map) = value { [INFO] [stderr] ... | [INFO] [stderr] 45 | | } [INFO] [stderr] 46 | | } [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] 13 | match *obj { [INFO] [stderr] 14 | Value::Object(ref mut map) => { [INFO] [stderr] 15 | // let id = map.get("id").clone(); [INFO] [stderr] 16 | if let Value::Object(value_map) = value { [INFO] [stderr] 17 | for key in value_map.keys() { [INFO] [stderr] 18 | if key != "id" { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/update.rs:33:26 [INFO] [stderr] | [INFO] [stderr] 33 | *b = value_s.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `value_s` [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/database/delete.rs:16:13 [INFO] [stderr] | [INFO] [stderr] 16 | / match obj { [INFO] [stderr] 17 | | &mut Value::Object(ref mut map) => { [INFO] [stderr] 18 | | if let Some(deleted) = map.remove(key) { [INFO] [stderr] 19 | | Ok(deleted.clone()) [INFO] [stderr] ... | [INFO] [stderr] 39 | | } [INFO] [stderr] 40 | | } [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] 16 | match *obj { [INFO] [stderr] 17 | Value::Object(ref mut map) => { [INFO] [stderr] 18 | if let Some(deleted) = map.remove(key) { [INFO] [stderr] 19 | Ok(deleted.clone()) [INFO] [stderr] 20 | } else { [INFO] [stderr] 21 | log_n_wrap(&self.logger, NotFound(format!("Table not found {}", &key))) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/database/query_api/filter.rs:10:9 [INFO] [stderr] | [INFO] [stderr] 10 | let ref filters = queries.filter; [INFO] [stderr] | ----^^^^^^^^^^^------------------ help: try: `let filters = &queries.filter;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/filter.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | / if let &mut Value::Array(ref mut arr) = obj { [INFO] [stderr] 12 | | let mut size = arr.len(); [INFO] [stderr] 13 | | let mut i = 0; [INFO] [stderr] 14 | | while i < size { [INFO] [stderr] ... | [INFO] [stderr] 34 | | } [INFO] [stderr] 35 | | } else {} [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] 11 | if let Value::Array(ref mut arr) = *obj { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/filter.rs:39:5 [INFO] [stderr] | [INFO] [stderr] 39 | / match field_value { [INFO] [stderr] 40 | | &Value::Bool(_) => return serde_json::to_value(query_value == "true"), [INFO] [stderr] 41 | | &Value::Number(_) => return serde_json::to_value(i64::from_str_radix(query_value, 10).ok()), [INFO] [stderr] 42 | | &Value::String(_) => return serde_json::to_value(query_value), [INFO] [stderr] ... | [INFO] [stderr] 46 | | } [INFO] [stderr] 47 | | } [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] 39 | match *field_value { [INFO] [stderr] 40 | Value::Bool(_) => return serde_json::to_value(query_value == "true"), [INFO] [stderr] 41 | Value::Number(_) => return serde_json::to_value(i64::from_str_radix(query_value, 10).ok()), [INFO] [stderr] 42 | Value::String(_) => return serde_json::to_value(query_value), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/database/query_api/filter.rs:94:47 [INFO] [stderr] | [INFO] [stderr] 94 | let parts = query_value.split("|"); [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/database/query_api/q.rs:9:9 [INFO] [stderr] | [INFO] [stderr] 9 | / if let &mut Value::Array(ref mut arr) = obj { [INFO] [stderr] 10 | | let mut size = arr.len(); [INFO] [stderr] 11 | | let mut i = 0; [INFO] [stderr] 12 | | while i < size { [INFO] [stderr] ... | [INFO] [stderr] 46 | | } [INFO] [stderr] 47 | | } [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] 9 | if let Value::Array(ref mut arr) = *obj { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/q.rs:16:21 [INFO] [stderr] | [INFO] [stderr] 16 | / match item { [INFO] [stderr] 17 | | &Value::Object(ref map) => { [INFO] [stderr] 18 | | for key in map.keys() { [INFO] [stderr] 19 | | if let Some(field) = item.get(key) { [INFO] [stderr] ... | [INFO] [stderr] 35 | | _ => {} [INFO] [stderr] 36 | | } [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] 16 | match *item { [INFO] [stderr] 17 | Value::Object(ref map) => { [INFO] [stderr] 18 | for key in map.keys() { [INFO] [stderr] 19 | if let Some(field) = item.get(key) { [INFO] [stderr] 20 | if let &Value::String(ref f_str) = field { [INFO] [stderr] 21 | valid = f_str.contains(q); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/q.rs:20:37 [INFO] [stderr] | [INFO] [stderr] 20 | / if let &Value::String(ref f_str) = field { [INFO] [stderr] 21 | | valid = f_str.contains(q); [INFO] [stderr] 22 | | if valid { [INFO] [stderr] 23 | | break; [INFO] [stderr] 24 | | } [INFO] [stderr] 25 | | } [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] 20 | if let Value::String(ref f_str) = *field { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/database/query_api/sort.rs:9:70 [INFO] [stderr] | [INFO] [stderr] 9 | fn compare(a: &Map, b: &Map, sort_key: &String) -> Ordering { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:12:13 [INFO] [stderr] | [INFO] [stderr] 12 | / match a_val { [INFO] [stderr] 13 | | &Value::Array(ref a_arr) => { [INFO] [stderr] 14 | | if let &Value::Array(ref b_arr) = b_val { [INFO] [stderr] 15 | | return a_arr.len().cmp(&b_arr.len()); [INFO] [stderr] ... | [INFO] [stderr] 58 | | } [INFO] [stderr] 59 | | } [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] 12 | match *a_val { [INFO] [stderr] 13 | Value::Array(ref a_arr) => { [INFO] [stderr] 14 | if let &Value::Array(ref b_arr) = b_val { [INFO] [stderr] 15 | return a_arr.len().cmp(&b_arr.len()); [INFO] [stderr] 16 | } else { [INFO] [stderr] 17 | return Ordering::Greater; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:14:21 [INFO] [stderr] | [INFO] [stderr] 14 | / if let &Value::Array(ref b_arr) = b_val { [INFO] [stderr] 15 | | return a_arr.len().cmp(&b_arr.len()); [INFO] [stderr] 16 | | } else { [INFO] [stderr] 17 | | return Ordering::Greater; [INFO] [stderr] 18 | | } [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] 14 | if let Value::Array(ref b_arr) = *b_val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:21:21 [INFO] [stderr] | [INFO] [stderr] 21 | / if let &Value::Object(ref b_obj) = b_val { [INFO] [stderr] 22 | | return a_obj.len().cmp(&b_obj.len()); [INFO] [stderr] 23 | | } else { [INFO] [stderr] 24 | | return Ordering::Greater; [INFO] [stderr] 25 | | } [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] 21 | if let Value::Object(ref b_obj) = *b_val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:28:21 [INFO] [stderr] | [INFO] [stderr] 28 | / if let &Value::Number(ref b_num) = b_val { [INFO] [stderr] 29 | | // TODO: clear unwraps [INFO] [stderr] 30 | | return a_num.as_f64() [INFO] [stderr] 31 | | .unwrap() [INFO] [stderr] ... | [INFO] [stderr] 35 | | return Ordering::Greater; [INFO] [stderr] 36 | | } [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] 28 | if let Value::Number(ref b_num) = *b_val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:39:21 [INFO] [stderr] | [INFO] [stderr] 39 | / if let &Value::String(ref b_str) = b_val { [INFO] [stderr] 40 | | return a_str.cmp(&b_str); [INFO] [stderr] 41 | | } else { [INFO] [stderr] 42 | | return Ordering::Greater; [INFO] [stderr] 43 | | } [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] 39 | if let Value::String(ref b_str) = *b_val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:46:21 [INFO] [stderr] | [INFO] [stderr] 46 | / if let &Value::Bool(b_bool) = b_val { [INFO] [stderr] 47 | | return a_bool.cmp(&b_bool); [INFO] [stderr] 48 | | } else { [INFO] [stderr] 49 | | return Ordering::Greater; [INFO] [stderr] 50 | | } [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] 46 | if let Value::Bool(b_bool) = *b_val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:53:21 [INFO] [stderr] | [INFO] [stderr] 53 | / if let &Value::Null = b_val { [INFO] [stderr] 54 | | return Ordering::Equal; [INFO] [stderr] 55 | | } else { [INFO] [stderr] 56 | | return Ordering::Less; [INFO] [stderr] 57 | | } [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] 53 | if let Value::Null = *b_val { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/database/query_api/sort.rs:64:16 [INFO] [stderr] | [INFO] [stderr] 64 | if let Some(_) = b.get(sort_key) { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 65 | | Ordering::Less [INFO] [stderr] 66 | | } else { [INFO] [stderr] 67 | | Ordering::Equal [INFO] [stderr] 68 | | } [INFO] [stderr] | |_________- help: try this: `if b.get(sort_key).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: length comparison to zero [INFO] [stderr] --> src/database/query_api/sort.rs:74:8 [INFO] [stderr] | [INFO] [stderr] 74 | if queries.sort.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `queries.sort.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:77:5 [INFO] [stderr] | [INFO] [stderr] 77 | / if let &mut Value::Array(ref mut arr) = obj { [INFO] [stderr] 78 | | let ref sorts = queries.sort; [INFO] [stderr] 79 | | arr.sort_by(|a: &Value, b: &Value| { [INFO] [stderr] 80 | | match a { [INFO] [stderr] ... | [INFO] [stderr] 100 | | }); [INFO] [stderr] 101 | | }; [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] 77 | if let Value::Array(ref mut arr) = *obj { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/database/query_api/sort.rs:78:13 [INFO] [stderr] | [INFO] [stderr] 78 | let ref sorts = queries.sort; [INFO] [stderr] | ----^^^^^^^^^---------------- help: try: `let sorts = &queries.sort;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:80:13 [INFO] [stderr] | [INFO] [stderr] 80 | / match a { [INFO] [stderr] 81 | | &Value::Object(ref map_a) => { [INFO] [stderr] 82 | | if let &Value::Object(ref map_b) = b { [INFO] [stderr] 83 | | let mut result = Ordering::Equal; [INFO] [stderr] ... | [INFO] [stderr] 98 | | _ => Ordering::Less, [INFO] [stderr] 99 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 80 | match *a { [INFO] [stderr] 81 | Value::Object(ref map_a) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:82:21 [INFO] [stderr] | [INFO] [stderr] 82 | / if let &Value::Object(ref map_b) = b { [INFO] [stderr] 83 | | let mut result = Ordering::Equal; [INFO] [stderr] 84 | | for sort in sorts { [INFO] [stderr] 85 | | result = match sort { [INFO] [stderr] ... | [INFO] [stderr] 95 | | Ordering::Greater [INFO] [stderr] 96 | | } [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] 82 | if let Value::Object(ref map_b) = *b { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:85:38 [INFO] [stderr] | [INFO] [stderr] 85 | result = match sort { [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 86 | | &Sort::ASC(ref sort_key) => compare(&map_a, &map_b, &sort_key), [INFO] [stderr] 87 | | &Sort::DSC(ref sort_key) => compare(&map_b, &map_a, &sort_key), [INFO] [stderr] 88 | | }; [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] 85 | result = match *sort { [INFO] [stderr] 86 | Sort::ASC(ref sort_key) => compare(&map_a, &map_b, &sort_key), [INFO] [stderr] 87 | Sort::DSC(ref sort_key) => compare(&map_b, &map_a, &sort_key), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/database/query_api/fields.rs:9:9 [INFO] [stderr] | [INFO] [stderr] 9 | let ref fields = queries.fields; [INFO] [stderr] | ----^^^^^^^^^^------------------ help: try: `let fields = &queries.fields;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/database/query_api/fields.rs:10:8 [INFO] [stderr] | [INFO] [stderr] 10 | if fields.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `fields.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/fields.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | / match obj { [INFO] [stderr] 14 | | &mut Value::Array(ref mut arr) => { [INFO] [stderr] 15 | | let mut i = 0usize; [INFO] [stderr] 16 | | let size = (&arr.len()).clone(); [INFO] [stderr] ... | [INFO] [stderr] 46 | | } [INFO] [stderr] 47 | | } [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] 13 | match *obj { [INFO] [stderr] 14 | Value::Array(ref mut arr) => { [INFO] [stderr] 15 | let mut i = 0usize; [INFO] [stderr] 16 | let size = (&arr.len()).clone(); [INFO] [stderr] 17 | let remove_keys = match arr.get(0) { [INFO] [stderr] 18 | Some(item) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/query_api/fields.rs:16:24 [INFO] [stderr] | [INFO] [stderr] 16 | let size = (&arr.len()).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*(&arr.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/fields.rs:19:21 [INFO] [stderr] | [INFO] [stderr] 19 | / if let &Value::Object(ref map) = item { [INFO] [stderr] 20 | | diff_left(map.keys(), fields) [INFO] [stderr] 21 | | } else { [INFO] [stderr] 22 | | Vec::::new() [INFO] [stderr] 23 | | } [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] 19 | if let Value::Object(ref map) = *item { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get_mut().unwrap()` on a slice. Using `[]` is more clear and more concise [INFO] [stderr] --> src/database/query_api/fields.rs:28:31 [INFO] [stderr] | [INFO] [stderr] 28 | let map_val = arr.get_mut(i).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `arr[i]` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/fields.rs:29:17 [INFO] [stderr] | [INFO] [stderr] 29 | / if let &mut Value::Object(ref mut obj) = map_val { [INFO] [stderr] 30 | | for key in &remove_keys { [INFO] [stderr] 31 | | obj.remove(key); [INFO] [stderr] 32 | | } [INFO] [stderr] 33 | | } [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] 29 | if let Value::Object(ref mut obj) = *map_val { [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/database/query_api/fields.rs:50:43 [INFO] [stderr] | [INFO] [stderr] 50 | fn diff_left(a: serde_json::map::Keys, b: &Vec) -> 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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/database/query_api/paginate.rs:10:9 [INFO] [stderr] | [INFO] [stderr] 10 | let ref _offset = queries.paginate.0; [INFO] [stderr] | ----^^^^^^^^^^^---------------------- help: try: `let _offset = &queries.paginate.0;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/database/query_api/paginate.rs:11:9 [INFO] [stderr] | [INFO] [stderr] 11 | let ref _limit = queries.paginate.1; [INFO] [stderr] | ----^^^^^^^^^^---------------------- help: try: `let _limit = &queries.paginate.1;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [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/database/query_api/paginate.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | / match obj { [INFO] [stderr] 14 | | &mut Value::Array(ref mut arr) => { [INFO] [stderr] 15 | | let offset = match _offset { [INFO] [stderr] 16 | | &Page::OFFSET(ref index) => index.clone(), [INFO] [stderr] ... | [INFO] [stderr] 33 | | } [INFO] [stderr] 34 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 13 | if let &mut Value::Array(ref mut arr) = obj { [INFO] [stderr] 14 | let offset = match _offset { [INFO] [stderr] 15 | &Page::OFFSET(ref index) => index.clone(), [INFO] [stderr] 16 | _ => 0u8, [INFO] [stderr] 17 | }; [INFO] [stderr] 18 | let limit = match _limit { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/paginate.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | / match obj { [INFO] [stderr] 14 | | &mut Value::Array(ref mut arr) => { [INFO] [stderr] 15 | | let offset = match _offset { [INFO] [stderr] 16 | | &Page::OFFSET(ref index) => index.clone(), [INFO] [stderr] ... | [INFO] [stderr] 33 | | } [INFO] [stderr] 34 | | } [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] 13 | match *obj { [INFO] [stderr] 14 | Value::Array(ref mut arr) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/paginate.rs:15:26 [INFO] [stderr] | [INFO] [stderr] 15 | let offset = match _offset { [INFO] [stderr] | __________________________^ [INFO] [stderr] 16 | | &Page::OFFSET(ref index) => index.clone(), [INFO] [stderr] 17 | | _ => 0u8, [INFO] [stderr] 18 | | }; [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] 15 | let offset = match *_offset { [INFO] [stderr] 16 | Page::OFFSET(ref index) => index.clone(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/query_api/paginate.rs:16:45 [INFO] [stderr] | [INFO] [stderr] 16 | &Page::OFFSET(ref index) => index.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^ help: try dereferencing it: `*index` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/paginate.rs:19:25 [INFO] [stderr] | [INFO] [stderr] 19 | let limit = match _limit { [INFO] [stderr] | _________________________^ [INFO] [stderr] 20 | | &Page::LIMIT(ref index) => index.clone(), [INFO] [stderr] 21 | | _ => arr.len().clone() as u8, [INFO] [stderr] 22 | | }; [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] 19 | let limit = match *_limit { [INFO] [stderr] 20 | Page::LIMIT(ref index) => index.clone(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/query_api/paginate.rs:20:44 [INFO] [stderr] | [INFO] [stderr] 20 | &Page::LIMIT(ref index) => index.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^ help: try dereferencing it: `*index` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/query_api/paginate.rs:21:22 [INFO] [stderr] | [INFO] [stderr] 21 | _ => arr.len().clone() as u8, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `arr.len()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/query_api/paginate.rs:23:28 [INFO] [stderr] | [INFO] [stderr] 23 | let o: usize = offset.clone() as usize; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `offset` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/query_api/paginate.rs:24:28 [INFO] [stderr] | [INFO] [stderr] 24 | let l: usize = limit.clone() as usize; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `limit` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: the variable `i` is used as a loop counter. Consider using `for (i, item) in arr.enumerate()` or similar iterators [INFO] [stderr] --> src/database/query_api/paginate.rs:41:16 [INFO] [stderr] | [INFO] [stderr] 41 | for val in arr { [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `database::Database` [INFO] [stderr] --> src/database/mod.rs:38:5 [INFO] [stderr] | [INFO] [stderr] 38 | / pub fn new() -> Database { [INFO] [stderr] 39 | | Database { [INFO] [stderr] 40 | | logger: ROOT_LOGGER.new(o!()), [INFO] [stderr] 41 | | configuration: None, [INFO] [stderr] 42 | | data: serde_json::Value::Null, [INFO] [stderr] 43 | | } [INFO] [stderr] 44 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 36 | impl Default for database::Database { [INFO] [stderr] 37 | fn default() -> Self { [INFO] [stderr] 38 | Self::new() [INFO] [stderr] 39 | } [INFO] [stderr] 40 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/database/mod.rs:80:27 [INFO] [stderr] | [INFO] [stderr] 80 | pub fn decide_id(val: &String) -> i64 { [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] 80 | pub fn decide_id(val: &str) -> i64 { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `val.as_str()` to [INFO] [stderr] | [INFO] [stderr] 81 | match i64::from_str_radix(val, 10) { [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/database/mod.rs:94:12 [INFO] [stderr] | [INFO] [stderr] 94 | if keys.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `keys.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/mod.rs:98:9 [INFO] [stderr] | [INFO] [stderr] 98 | / match json_object { [INFO] [stderr] 99 | | &mut Array(ref mut array) => { [INFO] [stderr] 100 | | let id = Self::decide_id(&key); [INFO] [stderr] 101 | | if let Some(idx) = Database::find_index(&array, &id) { [INFO] [stderr] ... | [INFO] [stderr] 120 | | } [INFO] [stderr] 121 | | }; [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] 98 | match *json_object { [INFO] [stderr] 99 | Array(ref mut array) => { [INFO] [stderr] 100 | let id = Self::decide_id(&key); [INFO] [stderr] 101 | if let Some(idx) = Database::find_index(&array, &id) { [INFO] [stderr] 102 | if let Some(obj) = array.get_mut(idx) { [INFO] [stderr] 103 | return Self::get_object(keys, obj); [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/database/mod.rs:156:24 [INFO] [stderr] | [INFO] [stderr] 156 | fn find_index(vec: &Vec, target: &i64) -> Option { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Value]` [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/database/mod.rs:156:45 [INFO] [stderr] | [INFO] [stderr] 156 | fn find_index(vec: &Vec, target: &i64) -> Option { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `i64` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the variable `index` is used as a loop counter. Consider using `for (index, item) in vec.iter().enumerate()` or similar iterators [INFO] [stderr] --> src/database/mod.rs:158:22 [INFO] [stderr] | [INFO] [stderr] 158 | for value in vec.iter() { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/service/utils.rs:44:16 [INFO] [stderr] | [INFO] [stderr] 44 | path.split("/") [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/query_api/sort.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | / match self { [INFO] [stderr] 18 | | &Sort::ASC(ref s_name) => { [INFO] [stderr] 19 | | match other { [INFO] [stderr] 20 | | &Sort::ASC(ref o_name) => s_name == o_name, [INFO] [stderr] ... | [INFO] [stderr] 29 | | } [INFO] [stderr] 30 | | } [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] 17 | match *self { [INFO] [stderr] 18 | Sort::ASC(ref s_name) => { [INFO] [stderr] 19 | match other { [INFO] [stderr] 20 | &Sort::ASC(ref o_name) => s_name == o_name, [INFO] [stderr] 21 | &Sort::DSC(_) => false, [INFO] [stderr] 22 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/query_api/sort.rs:19:17 [INFO] [stderr] | [INFO] [stderr] 19 | / match other { [INFO] [stderr] 20 | | &Sort::ASC(ref o_name) => s_name == o_name, [INFO] [stderr] 21 | | &Sort::DSC(_) => false, [INFO] [stderr] 22 | | } [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] 19 | match *other { [INFO] [stderr] 20 | Sort::ASC(ref o_name) => s_name == o_name, [INFO] [stderr] 21 | Sort::DSC(_) => false, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/query_api/sort.rs:25:17 [INFO] [stderr] | [INFO] [stderr] 25 | / match other { [INFO] [stderr] 26 | | &Sort::ASC(_) => false, [INFO] [stderr] 27 | | &Sort::DSC(ref o_name) => s_name == o_name, [INFO] [stderr] 28 | | } [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] 25 | match *other { [INFO] [stderr] 26 | Sort::ASC(_) => false, [INFO] [stderr] 27 | Sort::DSC(ref o_name) => s_name == o_name, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/query_api/page.rs:16:9 [INFO] [stderr] | [INFO] [stderr] 16 | / match self { [INFO] [stderr] 17 | | &Page::OFFSET(s_size) => { [INFO] [stderr] 18 | | match other { [INFO] [stderr] 19 | | &Page::OFFSET(o_size) => s_size == o_size, [INFO] [stderr] ... | [INFO] [stderr] 28 | | } [INFO] [stderr] 29 | | } [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] 16 | match *self { [INFO] [stderr] 17 | Page::OFFSET(s_size) => { [INFO] [stderr] 18 | match other { [INFO] [stderr] 19 | &Page::OFFSET(o_size) => s_size == o_size, [INFO] [stderr] 20 | &Page::LIMIT(_) => false, [INFO] [stderr] 21 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/query_api/page.rs:18:17 [INFO] [stderr] | [INFO] [stderr] 18 | / match other { [INFO] [stderr] 19 | | &Page::OFFSET(o_size) => s_size == o_size, [INFO] [stderr] 20 | | &Page::LIMIT(_) => false, [INFO] [stderr] 21 | | } [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] 18 | match *other { [INFO] [stderr] 19 | Page::OFFSET(o_size) => s_size == o_size, [INFO] [stderr] 20 | Page::LIMIT(_) => false, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/query_api/page.rs:24:17 [INFO] [stderr] | [INFO] [stderr] 24 | / match other { [INFO] [stderr] 25 | | &Page::OFFSET(_) => false, [INFO] [stderr] 26 | | &Page::LIMIT(o_size) => s_size == o_size, [INFO] [stderr] 27 | | } [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] 24 | match *other { [INFO] [stderr] 25 | Page::OFFSET(_) => false, [INFO] [stderr] 26 | Page::LIMIT(o_size) => s_size == o_size, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/service/query_api/mod.rs:16:39 [INFO] [stderr] | [INFO] [stderr] 16 | for param in params.split("&") { [INFO] [stderr] | ^^^ help: try using a char instead: `'&'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/service/query_api/mod.rs:21:45 [INFO] [stderr] | [INFO] [stderr] 21 | let parts = param.splitn(2, "=").collect::>(); [INFO] [stderr] | ^^^ help: try using a char instead: `'='` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/service/query_api/mod.rs:26:27 [INFO] [stderr] | [INFO] [stderr] 26 | let key = parts.get(0).unwrap().to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `&parts[0]` [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: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/service/query_api/mod.rs:27:29 [INFO] [stderr] | [INFO] [stderr] 27 | let value = parts.get(1).unwrap().to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `&parts[1]` [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: single-character string constant used as pattern [INFO] [stderr] --> src/service/query_api/mod.rs:28:36 [INFO] [stderr] | [INFO] [stderr] 28 | if key.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: single-character string constant used as pattern [INFO] [stderr] --> src/service/query_api/mod.rs:52:28 [INFO] [stderr] | [INFO] [stderr] 52 | .split(",") [INFO] [stderr] | ^^^ help: try using a char instead: `','` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/service/query_api/mod.rs:69:43 [INFO] [stderr] | [INFO] [stderr] 69 | sort_vet.extend(q.value.split(",").map(Sort::from).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: single-character string constant used as pattern [INFO] [stderr] --> src/service/query_api/mod.rs:74:45 [INFO] [stderr] | [INFO] [stderr] 74 | filter_vet.extend(q.value.split(",").map(Query::from).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: you should consider adding a `Default` implementation for `service::query_api::Queries` [INFO] [stderr] --> src/service/query_api/mod.rs:104:5 [INFO] [stderr] | [INFO] [stderr] 104 | / pub fn new() -> Queries { [INFO] [stderr] 105 | | Queries { [INFO] [stderr] 106 | | fields: Vec::::new(), [INFO] [stderr] 107 | | filter: Vec::::new(), [INFO] [stderr] ... | [INFO] [stderr] 112 | | } [INFO] [stderr] 113 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 102 | impl Default for service::query_api::Queries { [INFO] [stderr] 103 | fn default() -> Self { [INFO] [stderr] 104 | Self::new() [INFO] [stderr] 105 | } [INFO] [stderr] 106 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/service/mod.rs:150:13 [INFO] [stderr] | [INFO] [stderr] 150 | / match req.method() { [INFO] [stderr] 151 | | &Get => { [INFO] [stderr] 152 | | let queries = query_api::parse(req.query()); [INFO] [stderr] 153 | | Self::get(path_parts, queries, response) [INFO] [stderr] ... | [INFO] [stderr] 158 | | _ => utils::error(response, StatusCode::MethodNotAllowed, "Method Not Allowed"), [INFO] [stderr] 159 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 150 | match *req.method() { [INFO] [stderr] 151 | Get => { [INFO] [stderr] 152 | let queries = query_api::parse(req.query()); [INFO] [stderr] 153 | Self::get(path_parts, queries, response) [INFO] [stderr] 154 | } [INFO] [stderr] 155 | Post => Self::post(req, path_parts, response), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `configuration::Configuration` [INFO] [stderr] --> src/configuration.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | / pub fn new() -> Configuration { [INFO] [stderr] 23 | | Configuration { [INFO] [stderr] 24 | | database: Database { [INFO] [stderr] 25 | | path: "db.json".to_string(), [INFO] [stderr] ... | [INFO] [stderr] 32 | | } [INFO] [stderr] 33 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 20 | impl Default for configuration::Configuration { [INFO] [stderr] 21 | fn default() -> Self { [INFO] [stderr] 22 | Self::new() [INFO] [stderr] 23 | } [INFO] [stderr] 24 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/update.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | / match obj { [INFO] [stderr] 14 | | &mut Value::Object(ref mut map) => { [INFO] [stderr] 15 | | // let id = map.get("id").clone(); [INFO] [stderr] 16 | | if let Value::Object(value_map) = value { [INFO] [stderr] ... | [INFO] [stderr] 45 | | } [INFO] [stderr] 46 | | } [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] 13 | match *obj { [INFO] [stderr] 14 | Value::Object(ref mut map) => { [INFO] [stderr] 15 | // let id = map.get("id").clone(); [INFO] [stderr] 16 | if let Value::Object(value_map) = value { [INFO] [stderr] 17 | for key in value_map.keys() { [INFO] [stderr] 18 | if key != "id" { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/update.rs:33:26 [INFO] [stderr] | [INFO] [stderr] 33 | *b = value_s.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `value_s` [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/database/delete.rs:16:13 [INFO] [stderr] | [INFO] [stderr] 16 | / match obj { [INFO] [stderr] 17 | | &mut Value::Object(ref mut map) => { [INFO] [stderr] 18 | | if let Some(deleted) = map.remove(key) { [INFO] [stderr] 19 | | Ok(deleted.clone()) [INFO] [stderr] ... | [INFO] [stderr] 39 | | } [INFO] [stderr] 40 | | } [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] 16 | match *obj { [INFO] [stderr] 17 | Value::Object(ref mut map) => { [INFO] [stderr] 18 | if let Some(deleted) = map.remove(key) { [INFO] [stderr] 19 | Ok(deleted.clone()) [INFO] [stderr] 20 | } else { [INFO] [stderr] 21 | log_n_wrap(&self.logger, NotFound(format!("Table not found {}", &key))) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/database/query_api/filter.rs:10:9 [INFO] [stderr] | [INFO] [stderr] 10 | let ref filters = queries.filter; [INFO] [stderr] | ----^^^^^^^^^^^------------------ help: try: `let filters = &queries.filter;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/filter.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | / if let &mut Value::Array(ref mut arr) = obj { [INFO] [stderr] 12 | | let mut size = arr.len(); [INFO] [stderr] 13 | | let mut i = 0; [INFO] [stderr] 14 | | while i < size { [INFO] [stderr] ... | [INFO] [stderr] 34 | | } [INFO] [stderr] 35 | | } else {} [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] 11 | if let Value::Array(ref mut arr) = *obj { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/filter.rs:39:5 [INFO] [stderr] | [INFO] [stderr] 39 | / match field_value { [INFO] [stderr] 40 | | &Value::Bool(_) => return serde_json::to_value(query_value == "true"), [INFO] [stderr] 41 | | &Value::Number(_) => return serde_json::to_value(i64::from_str_radix(query_value, 10).ok()), [INFO] [stderr] 42 | | &Value::String(_) => return serde_json::to_value(query_value), [INFO] [stderr] ... | [INFO] [stderr] 46 | | } [INFO] [stderr] 47 | | } [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] 39 | match *field_value { [INFO] [stderr] 40 | Value::Bool(_) => return serde_json::to_value(query_value == "true"), [INFO] [stderr] 41 | Value::Number(_) => return serde_json::to_value(i64::from_str_radix(query_value, 10).ok()), [INFO] [stderr] 42 | Value::String(_) => return serde_json::to_value(query_value), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/database/query_api/filter.rs:94:47 [INFO] [stderr] | [INFO] [stderr] 94 | let parts = query_value.split("|"); [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/database/query_api/q.rs:9:9 [INFO] [stderr] | [INFO] [stderr] 9 | / if let &mut Value::Array(ref mut arr) = obj { [INFO] [stderr] 10 | | let mut size = arr.len(); [INFO] [stderr] 11 | | let mut i = 0; [INFO] [stderr] 12 | | while i < size { [INFO] [stderr] ... | [INFO] [stderr] 46 | | } [INFO] [stderr] 47 | | } [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] 9 | if let Value::Array(ref mut arr) = *obj { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/q.rs:16:21 [INFO] [stderr] | [INFO] [stderr] 16 | / match item { [INFO] [stderr] 17 | | &Value::Object(ref map) => { [INFO] [stderr] 18 | | for key in map.keys() { [INFO] [stderr] 19 | | if let Some(field) = item.get(key) { [INFO] [stderr] ... | [INFO] [stderr] 35 | | _ => {} [INFO] [stderr] 36 | | } [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] 16 | match *item { [INFO] [stderr] 17 | Value::Object(ref map) => { [INFO] [stderr] 18 | for key in map.keys() { [INFO] [stderr] 19 | if let Some(field) = item.get(key) { [INFO] [stderr] 20 | if let &Value::String(ref f_str) = field { [INFO] [stderr] 21 | valid = f_str.contains(q); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/q.rs:20:37 [INFO] [stderr] | [INFO] [stderr] 20 | / if let &Value::String(ref f_str) = field { [INFO] [stderr] 21 | | valid = f_str.contains(q); [INFO] [stderr] 22 | | if valid { [INFO] [stderr] 23 | | break; [INFO] [stderr] 24 | | } [INFO] [stderr] 25 | | } [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] 20 | if let Value::String(ref f_str) = *field { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/database/query_api/sort.rs:9:70 [INFO] [stderr] | [INFO] [stderr] 9 | fn compare(a: &Map, b: &Map, sort_key: &String) -> Ordering { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:12:13 [INFO] [stderr] | [INFO] [stderr] 12 | / match a_val { [INFO] [stderr] 13 | | &Value::Array(ref a_arr) => { [INFO] [stderr] 14 | | if let &Value::Array(ref b_arr) = b_val { [INFO] [stderr] 15 | | return a_arr.len().cmp(&b_arr.len()); [INFO] [stderr] ... | [INFO] [stderr] 58 | | } [INFO] [stderr] 59 | | } [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] 12 | match *a_val { [INFO] [stderr] 13 | Value::Array(ref a_arr) => { [INFO] [stderr] 14 | if let &Value::Array(ref b_arr) = b_val { [INFO] [stderr] 15 | return a_arr.len().cmp(&b_arr.len()); [INFO] [stderr] 16 | } else { [INFO] [stderr] 17 | return Ordering::Greater; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:14:21 [INFO] [stderr] | [INFO] [stderr] 14 | / if let &Value::Array(ref b_arr) = b_val { [INFO] [stderr] 15 | | return a_arr.len().cmp(&b_arr.len()); [INFO] [stderr] 16 | | } else { [INFO] [stderr] 17 | | return Ordering::Greater; [INFO] [stderr] 18 | | } [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] 14 | if let Value::Array(ref b_arr) = *b_val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:21:21 [INFO] [stderr] | [INFO] [stderr] 21 | / if let &Value::Object(ref b_obj) = b_val { [INFO] [stderr] 22 | | return a_obj.len().cmp(&b_obj.len()); [INFO] [stderr] 23 | | } else { [INFO] [stderr] 24 | | return Ordering::Greater; [INFO] [stderr] 25 | | } [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] 21 | if let Value::Object(ref b_obj) = *b_val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:28:21 [INFO] [stderr] | [INFO] [stderr] 28 | / if let &Value::Number(ref b_num) = b_val { [INFO] [stderr] 29 | | // TODO: clear unwraps [INFO] [stderr] 30 | | return a_num.as_f64() [INFO] [stderr] 31 | | .unwrap() [INFO] [stderr] ... | [INFO] [stderr] 35 | | return Ordering::Greater; [INFO] [stderr] 36 | | } [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] 28 | if let Value::Number(ref b_num) = *b_val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:39:21 [INFO] [stderr] | [INFO] [stderr] 39 | / if let &Value::String(ref b_str) = b_val { [INFO] [stderr] 40 | | return a_str.cmp(&b_str); [INFO] [stderr] 41 | | } else { [INFO] [stderr] 42 | | return Ordering::Greater; [INFO] [stderr] 43 | | } [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] 39 | if let Value::String(ref b_str) = *b_val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:46:21 [INFO] [stderr] | [INFO] [stderr] 46 | / if let &Value::Bool(b_bool) = b_val { [INFO] [stderr] 47 | | return a_bool.cmp(&b_bool); [INFO] [stderr] 48 | | } else { [INFO] [stderr] 49 | | return Ordering::Greater; [INFO] [stderr] 50 | | } [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] 46 | if let Value::Bool(b_bool) = *b_val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:53:21 [INFO] [stderr] | [INFO] [stderr] 53 | / if let &Value::Null = b_val { [INFO] [stderr] 54 | | return Ordering::Equal; [INFO] [stderr] 55 | | } else { [INFO] [stderr] 56 | | return Ordering::Less; [INFO] [stderr] 57 | | } [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] 53 | if let Value::Null = *b_val { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/database/query_api/sort.rs:64:16 [INFO] [stderr] | [INFO] [stderr] 64 | if let Some(_) = b.get(sort_key) { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 65 | | Ordering::Less [INFO] [stderr] 66 | | } else { [INFO] [stderr] 67 | | Ordering::Equal [INFO] [stderr] 68 | | } [INFO] [stderr] | |_________- help: try this: `if b.get(sort_key).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: length comparison to zero [INFO] [stderr] --> src/database/query_api/sort.rs:74:8 [INFO] [stderr] | [INFO] [stderr] 74 | if queries.sort.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `queries.sort.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:77:5 [INFO] [stderr] | [INFO] [stderr] 77 | / if let &mut Value::Array(ref mut arr) = obj { [INFO] [stderr] 78 | | let ref sorts = queries.sort; [INFO] [stderr] 79 | | arr.sort_by(|a: &Value, b: &Value| { [INFO] [stderr] 80 | | match a { [INFO] [stderr] ... | [INFO] [stderr] 100 | | }); [INFO] [stderr] 101 | | }; [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] 77 | if let Value::Array(ref mut arr) = *obj { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/database/query_api/sort.rs:78:13 [INFO] [stderr] | [INFO] [stderr] 78 | let ref sorts = queries.sort; [INFO] [stderr] | ----^^^^^^^^^---------------- help: try: `let sorts = &queries.sort;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:80:13 [INFO] [stderr] | [INFO] [stderr] 80 | / match a { [INFO] [stderr] 81 | | &Value::Object(ref map_a) => { [INFO] [stderr] 82 | | if let &Value::Object(ref map_b) = b { [INFO] [stderr] 83 | | let mut result = Ordering::Equal; [INFO] [stderr] ... | [INFO] [stderr] 98 | | _ => Ordering::Less, [INFO] [stderr] 99 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 80 | match *a { [INFO] [stderr] 81 | Value::Object(ref map_a) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:82:21 [INFO] [stderr] | [INFO] [stderr] 82 | / if let &Value::Object(ref map_b) = b { [INFO] [stderr] 83 | | let mut result = Ordering::Equal; [INFO] [stderr] 84 | | for sort in sorts { [INFO] [stderr] 85 | | result = match sort { [INFO] [stderr] ... | [INFO] [stderr] 95 | | Ordering::Greater [INFO] [stderr] 96 | | } [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] 82 | if let Value::Object(ref map_b) = *b { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/sort.rs:85:38 [INFO] [stderr] | [INFO] [stderr] 85 | result = match sort { [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 86 | | &Sort::ASC(ref sort_key) => compare(&map_a, &map_b, &sort_key), [INFO] [stderr] 87 | | &Sort::DSC(ref sort_key) => compare(&map_b, &map_a, &sort_key), [INFO] [stderr] 88 | | }; [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] 85 | result = match *sort { [INFO] [stderr] 86 | Sort::ASC(ref sort_key) => compare(&map_a, &map_b, &sort_key), [INFO] [stderr] 87 | Sort::DSC(ref sort_key) => compare(&map_b, &map_a, &sort_key), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/database/query_api/fields.rs:9:9 [INFO] [stderr] | [INFO] [stderr] 9 | let ref fields = queries.fields; [INFO] [stderr] | ----^^^^^^^^^^------------------ help: try: `let fields = &queries.fields;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/database/query_api/fields.rs:10:8 [INFO] [stderr] | [INFO] [stderr] 10 | if fields.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `fields.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/fields.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | / match obj { [INFO] [stderr] 14 | | &mut Value::Array(ref mut arr) => { [INFO] [stderr] 15 | | let mut i = 0usize; [INFO] [stderr] 16 | | let size = (&arr.len()).clone(); [INFO] [stderr] ... | [INFO] [stderr] 46 | | } [INFO] [stderr] 47 | | } [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] 13 | match *obj { [INFO] [stderr] 14 | Value::Array(ref mut arr) => { [INFO] [stderr] 15 | let mut i = 0usize; [INFO] [stderr] 16 | let size = (&arr.len()).clone(); [INFO] [stderr] 17 | let remove_keys = match arr.get(0) { [INFO] [stderr] 18 | Some(item) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/query_api/fields.rs:16:24 [INFO] [stderr] | [INFO] [stderr] 16 | let size = (&arr.len()).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*(&arr.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/fields.rs:19:21 [INFO] [stderr] | [INFO] [stderr] 19 | / if let &Value::Object(ref map) = item { [INFO] [stderr] 20 | | diff_left(map.keys(), fields) [INFO] [stderr] 21 | | } else { [INFO] [stderr] 22 | | Vec::::new() [INFO] [stderr] 23 | | } [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] 19 | if let Value::Object(ref map) = *item { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get_mut().unwrap()` on a slice. Using `[]` is more clear and more concise [INFO] [stderr] --> src/database/query_api/fields.rs:28:31 [INFO] [stderr] | [INFO] [stderr] 28 | let map_val = arr.get_mut(i).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `arr[i]` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/fields.rs:29:17 [INFO] [stderr] | [INFO] [stderr] 29 | / if let &mut Value::Object(ref mut obj) = map_val { [INFO] [stderr] 30 | | for key in &remove_keys { [INFO] [stderr] 31 | | obj.remove(key); [INFO] [stderr] 32 | | } [INFO] [stderr] 33 | | } [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] 29 | if let Value::Object(ref mut obj) = *map_val { [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/database/query_api/fields.rs:50:43 [INFO] [stderr] | [INFO] [stderr] 50 | fn diff_left(a: serde_json::map::Keys, b: &Vec) -> 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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/database/query_api/paginate.rs:10:9 [INFO] [stderr] | [INFO] [stderr] 10 | let ref _offset = queries.paginate.0; [INFO] [stderr] | ----^^^^^^^^^^^---------------------- help: try: `let _offset = &queries.paginate.0;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/database/query_api/paginate.rs:11:9 [INFO] [stderr] | [INFO] [stderr] 11 | let ref _limit = queries.paginate.1; [INFO] [stderr] | ----^^^^^^^^^^---------------------- help: try: `let _limit = &queries.paginate.1;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [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/database/query_api/paginate.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | / match obj { [INFO] [stderr] 14 | | &mut Value::Array(ref mut arr) => { [INFO] [stderr] 15 | | let offset = match _offset { [INFO] [stderr] 16 | | &Page::OFFSET(ref index) => index.clone(), [INFO] [stderr] ... | [INFO] [stderr] 33 | | } [INFO] [stderr] 34 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 13 | if let &mut Value::Array(ref mut arr) = obj { [INFO] [stderr] 14 | let offset = match _offset { [INFO] [stderr] 15 | &Page::OFFSET(ref index) => index.clone(), [INFO] [stderr] 16 | _ => 0u8, [INFO] [stderr] 17 | }; [INFO] [stderr] 18 | let limit = match _limit { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/paginate.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | / match obj { [INFO] [stderr] 14 | | &mut Value::Array(ref mut arr) => { [INFO] [stderr] 15 | | let offset = match _offset { [INFO] [stderr] 16 | | &Page::OFFSET(ref index) => index.clone(), [INFO] [stderr] ... | [INFO] [stderr] 33 | | } [INFO] [stderr] 34 | | } [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] 13 | match *obj { [INFO] [stderr] 14 | Value::Array(ref mut arr) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/paginate.rs:15:26 [INFO] [stderr] | [INFO] [stderr] 15 | let offset = match _offset { [INFO] [stderr] | __________________________^ [INFO] [stderr] 16 | | &Page::OFFSET(ref index) => index.clone(), [INFO] [stderr] 17 | | _ => 0u8, [INFO] [stderr] 18 | | }; [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] 15 | let offset = match *_offset { [INFO] [stderr] 16 | Page::OFFSET(ref index) => index.clone(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/query_api/paginate.rs:16:45 [INFO] [stderr] | [INFO] [stderr] 16 | &Page::OFFSET(ref index) => index.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^ help: try dereferencing it: `*index` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/query_api/paginate.rs:19:25 [INFO] [stderr] | [INFO] [stderr] 19 | let limit = match _limit { [INFO] [stderr] | _________________________^ [INFO] [stderr] 20 | | &Page::LIMIT(ref index) => index.clone(), [INFO] [stderr] 21 | | _ => arr.len().clone() as u8, [INFO] [stderr] 22 | | }; [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] 19 | let limit = match *_limit { [INFO] [stderr] 20 | Page::LIMIT(ref index) => index.clone(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/query_api/paginate.rs:20:44 [INFO] [stderr] | [INFO] [stderr] 20 | &Page::LIMIT(ref index) => index.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^ help: try dereferencing it: `*index` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/query_api/paginate.rs:21:22 [INFO] [stderr] | [INFO] [stderr] 21 | _ => arr.len().clone() as u8, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `arr.len()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/query_api/paginate.rs:23:28 [INFO] [stderr] | [INFO] [stderr] 23 | let o: usize = offset.clone() as usize; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `offset` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/database/query_api/paginate.rs:24:28 [INFO] [stderr] | [INFO] [stderr] 24 | let l: usize = limit.clone() as usize; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `limit` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: the variable `i` is used as a loop counter. Consider using `for (i, item) in arr.enumerate()` or similar iterators [INFO] [stderr] --> src/database/query_api/paginate.rs:41:16 [INFO] [stderr] | [INFO] [stderr] 41 | for val in arr { [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `database::Database` [INFO] [stderr] --> src/database/mod.rs:38:5 [INFO] [stderr] | [INFO] [stderr] 38 | / pub fn new() -> Database { [INFO] [stderr] 39 | | Database { [INFO] [stderr] 40 | | logger: ROOT_LOGGER.new(o!()), [INFO] [stderr] 41 | | configuration: None, [INFO] [stderr] 42 | | data: serde_json::Value::Null, [INFO] [stderr] 43 | | } [INFO] [stderr] 44 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 36 | impl Default for database::Database { [INFO] [stderr] 37 | fn default() -> Self { [INFO] [stderr] 38 | Self::new() [INFO] [stderr] 39 | } [INFO] [stderr] 40 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/database/mod.rs:80:27 [INFO] [stderr] | [INFO] [stderr] 80 | pub fn decide_id(val: &String) -> i64 { [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] 80 | pub fn decide_id(val: &str) -> i64 { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `val.as_str()` to [INFO] [stderr] | [INFO] [stderr] 81 | match i64::from_str_radix(val, 10) { [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/database/mod.rs:94:12 [INFO] [stderr] | [INFO] [stderr] 94 | if keys.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `keys.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/database/mod.rs:98:9 [INFO] [stderr] | [INFO] [stderr] 98 | / match json_object { [INFO] [stderr] 99 | | &mut Array(ref mut array) => { [INFO] [stderr] 100 | | let id = Self::decide_id(&key); [INFO] [stderr] 101 | | if let Some(idx) = Database::find_index(&array, &id) { [INFO] [stderr] ... | [INFO] [stderr] 120 | | } [INFO] [stderr] 121 | | }; [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] 98 | match *json_object { [INFO] [stderr] 99 | Array(ref mut array) => { [INFO] [stderr] 100 | let id = Self::decide_id(&key); [INFO] [stderr] 101 | if let Some(idx) = Database::find_index(&array, &id) { [INFO] [stderr] 102 | if let Some(obj) = array.get_mut(idx) { [INFO] [stderr] 103 | return Self::get_object(keys, obj); [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/database/mod.rs:156:24 [INFO] [stderr] | [INFO] [stderr] 156 | fn find_index(vec: &Vec, target: &i64) -> Option { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Value]` [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/database/mod.rs:156:45 [INFO] [stderr] | [INFO] [stderr] 156 | fn find_index(vec: &Vec, target: &i64) -> Option { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `i64` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the variable `index` is used as a loop counter. Consider using `for (index, item) in vec.iter().enumerate()` or similar iterators [INFO] [stderr] --> src/database/mod.rs:158:22 [INFO] [stderr] | [INFO] [stderr] 158 | for value in vec.iter() { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 9.24s [INFO] running `"docker" "inspect" "769a2e9b6bcdefe01e2444981ab0576b8b92e05a0e78d4b79effb9fefebc5470"` [INFO] running `"docker" "rm" "-f" "769a2e9b6bcdefe01e2444981ab0576b8b92e05a0e78d4b79effb9fefebc5470"` [INFO] [stdout] 769a2e9b6bcdefe01e2444981ab0576b8b92e05a0e78d4b79effb9fefebc5470