[INFO] crate r2fa 0.5.0 is already in cache [INFO] extracting crate r2fa 0.5.0 into work/ex/clippy-test-run/sources/stable/reg/r2fa/0.5.0 [INFO] extracting crate r2fa 0.5.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/r2fa/0.5.0 [INFO] validating manifest of r2fa-0.5.0 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of r2fa-0.5.0 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing r2fa-0.5.0 [INFO] finished frobbing r2fa-0.5.0 [INFO] frobbed toml for r2fa-0.5.0 written to work/ex/clippy-test-run/sources/stable/reg/r2fa/0.5.0/Cargo.toml [INFO] started frobbing r2fa-0.5.0 [INFO] finished frobbing r2fa-0.5.0 [INFO] frobbed toml for r2fa-0.5.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/r2fa/0.5.0/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting r2fa-0.5.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/r2fa/0.5.0:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 6bcb0cf4a548c8c32cc9b54dfc90333c5af6a1ceb0697505e8fa1ddcc76c4080 [INFO] running `"docker" "start" "-a" "6bcb0cf4a548c8c32cc9b54dfc90333c5af6a1ceb0697505e8fa1ddcc76c4080"` [INFO] [stderr] Checking r2fa v0.5.0 (/opt/crater/workdir) [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/hotp.rs:219:22 [INFO] [stderr] | [INFO] [stderr] 219 | n if n < 1000000 => return Err(ErrorCode::CodeTooSmall), [INFO] [stderr] | ^^^^^^^ help: consider: `1_000_000` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/hotp.rs:220:22 [INFO] [stderr] | [INFO] [stderr] 220 | n if n > 2147483648 => return Err(ErrorCode::CodeTooBig), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `2_147_483_648` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:192:22 [INFO] [stderr] | [INFO] [stderr] 192 | n if n < 1000000 => return Err(ErrorCode::CodeTooSmall), [INFO] [stderr] | ^^^^^^^ help: consider: `1_000_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:193:22 [INFO] [stderr] | [INFO] [stderr] 193 | n if n > 2147483648 => return Err(ErrorCode::CodeTooBig), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `2_147_483_648` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/otp/hotp.rs:36:55 [INFO] [stderr] | [INFO] [stderr] 36 | fn compute_hmac(&self, digest: H, msg: &Vec) -> MacResult { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/otp/hotp.rs:45:27 [INFO] [stderr] | [INFO] [stderr] 45 | let snum: u32 = ((hash[0] as u32 & 0x7f) << 24) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u32::from(hash[0])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/otp/hotp.rs:46:17 [INFO] [stderr] | [INFO] [stderr] 46 | | ((hash[1] as u32 & 0xff) << 16) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u32::from(hash[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/otp/hotp.rs:47:17 [INFO] [stderr] | [INFO] [stderr] 47 | | ((hash[2] as u32 & 0xff) << 8) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u32::from(hash[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/otp/hotp.rs:48:16 [INFO] [stderr] | [INFO] [stderr] 48 | | (hash[3] as u32 & 0xff); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u32::from(hash[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/otp/hotp.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | nb = nb / base_len; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `nb /= base_len` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/hotp.rs:129:34 [INFO] [stderr] | [INFO] [stderr] 129 | pub fn is_valid(&self, code: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `otp::hotp::HOTPBuilder` [INFO] [stderr] --> src/otp/hotp.rs:193:5 [INFO] [stderr] | [INFO] [stderr] 193 | / pub fn new() -> HOTPBuilder { [INFO] [stderr] 194 | | HOTPBuilder { [INFO] [stderr] 195 | | key: None, [INFO] [stderr] 196 | | counter: 0, [INFO] [stderr] ... | [INFO] [stderr] 201 | | } [INFO] [stderr] 202 | | } [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] 191 | impl Default for otp::hotp::HOTPBuilder { [INFO] [stderr] 192 | fn default() -> Self { [INFO] [stderr] 193 | Self::new() [INFO] [stderr] 194 | } [INFO] [stderr] 195 | } [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/otp/mod.rs:47:36 [INFO] [stderr] | [INFO] [stderr] 47 | pub fn key(&mut self, key: &Vec) -> &mut $t { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] ::: src/otp/hotp.rs:204:5 [INFO] [stderr] | [INFO] [stderr] 204 | builder_common!(HOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [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] 47 | pub fn key(&mut self, key: &[u8]) -> &mut $t { [INFO] [stderr] | ^^^^^ [INFO] [stderr] help: change `key.clone()` to [INFO] [stderr] | [INFO] [stderr] 48 | self.key = Some(key.to_owned()); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/mod.rs:53:42 [INFO] [stderr] | [INFO] [stderr] 53 | pub fn ascii_key(&mut self, key: &String) -> &mut $t { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] ::: src/otp/hotp.rs:204:5 [INFO] [stderr] | [INFO] [stderr] 204 | builder_common!(HOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/mod.rs:59:40 [INFO] [stderr] | [INFO] [stderr] 59 | pub fn hex_key(&mut self, key: &String) -> &mut $t { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] ::: src/otp/hotp.rs:204:5 [INFO] [stderr] | [INFO] [stderr] 204 | builder_common!(HOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/mod.rs:68:43 [INFO] [stderr] | [INFO] [stderr] 68 | pub fn base32_key(&mut self, key: &String) -> &mut $t { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] ::: src/otp/hotp.rs:204:5 [INFO] [stderr] | [INFO] [stderr] 204 | builder_common!(HOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/otp/mod.rs:95:45 [INFO] [stderr] | [INFO] [stderr] 95 | pub fn output_base(&mut self, base: &Vec) -> &mut $t { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] ::: src/otp/hotp.rs:204:5 [INFO] [stderr] | [INFO] [stderr] 204 | builder_common!(HOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [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] 95 | pub fn output_base(&mut self, base: &[u8]) -> &mut $t { [INFO] [stderr] | ^^^^^ [INFO] [stderr] help: change `base.clone()` to [INFO] [stderr] | [INFO] [stderr] 96 | self.output_base = base.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/otp/hotp.rs:214:9 [INFO] [stderr] | [INFO] [stderr] 214 | / match self.runtime_error { [INFO] [stderr] 215 | | Some(e) => return Err(e), [INFO] [stderr] 216 | | None => (), [INFO] [stderr] 217 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(e) = self.runtime_error { return Err(e) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/otp/totp.rs:40:43 [INFO] [stderr] | [INFO] [stderr] 40 | (timestamp - self.initial_time) / self.period as u64 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `u64::from(self.period)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/totp.rs:83:34 [INFO] [stderr] | [INFO] [stderr] 83 | pub fn is_valid(&self, code: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `otp::totp::TOTPBuilder` [INFO] [stderr] --> src/otp/totp.rs:147:5 [INFO] [stderr] | [INFO] [stderr] 147 | / pub fn new() -> TOTPBuilder { [INFO] [stderr] 148 | | TOTPBuilder { [INFO] [stderr] 149 | | key: None, [INFO] [stderr] 150 | | timestamp_offset: 0, [INFO] [stderr] ... | [INFO] [stderr] 157 | | } [INFO] [stderr] 158 | | } [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] 145 | impl Default for otp::totp::TOTPBuilder { [INFO] [stderr] 146 | fn default() -> Self { [INFO] [stderr] 147 | Self::new() [INFO] [stderr] 148 | } [INFO] [stderr] 149 | } [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/otp/mod.rs:47:36 [INFO] [stderr] | [INFO] [stderr] 47 | pub fn key(&mut self, key: &Vec) -> &mut $t { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] ::: src/otp/totp.rs:160:5 [INFO] [stderr] | [INFO] [stderr] 160 | builder_common!(TOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [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] 47 | pub fn key(&mut self, key: &[u8]) -> &mut $t { [INFO] [stderr] | ^^^^^ [INFO] [stderr] help: change `key.clone()` to [INFO] [stderr] | [INFO] [stderr] 48 | self.key = Some(key.to_owned()); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/mod.rs:53:42 [INFO] [stderr] | [INFO] [stderr] 53 | pub fn ascii_key(&mut self, key: &String) -> &mut $t { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] ::: src/otp/totp.rs:160:5 [INFO] [stderr] | [INFO] [stderr] 160 | builder_common!(TOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/mod.rs:59:40 [INFO] [stderr] | [INFO] [stderr] 59 | pub fn hex_key(&mut self, key: &String) -> &mut $t { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] ::: src/otp/totp.rs:160:5 [INFO] [stderr] | [INFO] [stderr] 160 | builder_common!(TOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/mod.rs:68:43 [INFO] [stderr] | [INFO] [stderr] 68 | pub fn base32_key(&mut self, key: &String) -> &mut $t { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] ::: src/otp/totp.rs:160:5 [INFO] [stderr] | [INFO] [stderr] 160 | builder_common!(TOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/otp/mod.rs:95:45 [INFO] [stderr] | [INFO] [stderr] 95 | pub fn output_base(&mut self, base: &Vec) -> &mut $t { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] ::: src/otp/totp.rs:160:5 [INFO] [stderr] | [INFO] [stderr] 160 | builder_common!(TOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [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] 95 | pub fn output_base(&mut self, base: &[u8]) -> &mut $t { [INFO] [stderr] | ^^^^^ [INFO] [stderr] help: change `base.clone()` to [INFO] [stderr] | [INFO] [stderr] 96 | self.output_base = base.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/otp/totp.rs:187:9 [INFO] [stderr] | [INFO] [stderr] 187 | / match self.runtime_error { [INFO] [stderr] 188 | | Some(e) => return Err(e), [INFO] [stderr] 189 | | None => (), [INFO] [stderr] 190 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(e) = self.runtime_error { return Err(e) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/hotp.rs:219:22 [INFO] [stderr] | [INFO] [stderr] 219 | n if n < 1000000 => return Err(ErrorCode::CodeTooSmall), [INFO] [stderr] | ^^^^^^^ help: consider: `1_000_000` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/hotp.rs:220:22 [INFO] [stderr] | [INFO] [stderr] 220 | n if n > 2147483648 => return Err(ErrorCode::CodeTooBig), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `2_147_483_648` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/hotp.rs:569:42 [INFO] [stderr] | [INFO] [stderr] 569 | for nb in vec![10, 42, 69, 1024, 0xffffff] { [INFO] [stderr] | ^^^^^^^^ help: consider: `0x00ff_ffff` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:192:22 [INFO] [stderr] | [INFO] [stderr] 192 | n if n < 1000000 => return Err(ErrorCode::CodeTooSmall), [INFO] [stderr] | ^^^^^^^ help: consider: `1_000_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:193:22 [INFO] [stderr] | [INFO] [stderr] 193 | n if n > 2147483648 => return Err(ErrorCode::CodeTooBig), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `2_147_483_648` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:328:24 [INFO] [stderr] | [INFO] [stderr] 328 | .timestamp(1111111109) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_111_111_109` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:372:24 [INFO] [stderr] | [INFO] [stderr] 372 | .timestamp(1111111109) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_111_111_109` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:416:24 [INFO] [stderr] | [INFO] [stderr] 416 | .timestamp(1111111109) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_111_111_109` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:460:24 [INFO] [stderr] | [INFO] [stderr] 460 | .timestamp(1111111109) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_111_111_109` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:514:42 [INFO] [stderr] | [INFO] [stderr] 514 | for nb in vec![10, 42, 69, 1024, 0xffffff] { [INFO] [stderr] | ^^^^^^^^ help: consider: `0x00ff_ffff` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:574:14 [INFO] [stderr] | [INFO] [stderr] 574 | (1111111109, HashFunction::Sha1, "07081804"), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_111_111_109` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:575:14 [INFO] [stderr] | [INFO] [stderr] 575 | (1111111111, HashFunction::Sha1, "14050471"), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_111_111_111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:576:14 [INFO] [stderr] | [INFO] [stderr] 576 | (1234567890, HashFunction::Sha1, "89005924"), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_234_567_890` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:577:14 [INFO] [stderr] | [INFO] [stderr] 577 | (2000000000, HashFunction::Sha1, "69279037"), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `2_000_000_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:578:14 [INFO] [stderr] | [INFO] [stderr] 578 | (20000000000, HashFunction::Sha1, "65353130"), [INFO] [stderr] | ^^^^^^^^^^^ help: consider: `20_000_000_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:599:14 [INFO] [stderr] | [INFO] [stderr] 599 | (1111111109, HashFunction::Sha256, "68084774"), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_111_111_109` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:600:14 [INFO] [stderr] | [INFO] [stderr] 600 | (1111111111, HashFunction::Sha256, "67062674"), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_111_111_111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:601:14 [INFO] [stderr] | [INFO] [stderr] 601 | (1234567890, HashFunction::Sha256, "91819424"), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_234_567_890` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:602:14 [INFO] [stderr] | [INFO] [stderr] 602 | (2000000000, HashFunction::Sha256, "90698825"), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `2_000_000_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:603:14 [INFO] [stderr] | [INFO] [stderr] 603 | (20000000000, HashFunction::Sha256, "77737706"), [INFO] [stderr] | ^^^^^^^^^^^ help: consider: `20_000_000_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:624:14 [INFO] [stderr] | [INFO] [stderr] 624 | (1111111109, HashFunction::Sha512, "25091201"), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_111_111_109` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:625:14 [INFO] [stderr] | [INFO] [stderr] 625 | (1111111111, HashFunction::Sha512, "99943326"), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_111_111_111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:626:14 [INFO] [stderr] | [INFO] [stderr] 626 | (1234567890, HashFunction::Sha512, "93441116"), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_234_567_890` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:627:14 [INFO] [stderr] | [INFO] [stderr] 627 | (2000000000, HashFunction::Sha512, "38618901"), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `2_000_000_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/otp/totp.rs:628:14 [INFO] [stderr] | [INFO] [stderr] 628 | (20000000000, HashFunction::Sha512, "47863826"), [INFO] [stderr] | ^^^^^^^^^^^ help: consider: `20_000_000_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/otp/hotp.rs:36:55 [INFO] [stderr] | [INFO] [stderr] 36 | fn compute_hmac(&self, digest: H, msg: &Vec) -> MacResult { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/otp/hotp.rs:45:27 [INFO] [stderr] | [INFO] [stderr] 45 | let snum: u32 = ((hash[0] as u32 & 0x7f) << 24) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u32::from(hash[0])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/otp/hotp.rs:46:17 [INFO] [stderr] | [INFO] [stderr] 46 | | ((hash[1] as u32 & 0xff) << 16) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u32::from(hash[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/otp/hotp.rs:47:17 [INFO] [stderr] | [INFO] [stderr] 47 | | ((hash[2] as u32 & 0xff) << 8) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u32::from(hash[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/otp/hotp.rs:48:16 [INFO] [stderr] | [INFO] [stderr] 48 | | (hash[3] as u32 & 0xff); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u32::from(hash[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/otp/hotp.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | nb = nb / base_len; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `nb /= base_len` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/hotp.rs:129:34 [INFO] [stderr] | [INFO] [stderr] 129 | pub fn is_valid(&self, code: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `otp::hotp::HOTPBuilder` [INFO] [stderr] --> src/otp/hotp.rs:193:5 [INFO] [stderr] | [INFO] [stderr] 193 | / pub fn new() -> HOTPBuilder { [INFO] [stderr] 194 | | HOTPBuilder { [INFO] [stderr] 195 | | key: None, [INFO] [stderr] 196 | | counter: 0, [INFO] [stderr] ... | [INFO] [stderr] 201 | | } [INFO] [stderr] 202 | | } [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] 191 | impl Default for otp::hotp::HOTPBuilder { [INFO] [stderr] 192 | fn default() -> Self { [INFO] [stderr] 193 | Self::new() [INFO] [stderr] 194 | } [INFO] [stderr] 195 | } [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/otp/mod.rs:47:36 [INFO] [stderr] | [INFO] [stderr] 47 | pub fn key(&mut self, key: &Vec) -> &mut $t { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] ::: src/otp/hotp.rs:204:5 [INFO] [stderr] | [INFO] [stderr] 204 | builder_common!(HOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [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] 47 | pub fn key(&mut self, key: &[u8]) -> &mut $t { [INFO] [stderr] | ^^^^^ [INFO] [stderr] help: change `key.clone()` to [INFO] [stderr] | [INFO] [stderr] 48 | self.key = Some(key.to_owned()); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/mod.rs:53:42 [INFO] [stderr] | [INFO] [stderr] 53 | pub fn ascii_key(&mut self, key: &String) -> &mut $t { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] ::: src/otp/hotp.rs:204:5 [INFO] [stderr] | [INFO] [stderr] 204 | builder_common!(HOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/mod.rs:59:40 [INFO] [stderr] | [INFO] [stderr] 59 | pub fn hex_key(&mut self, key: &String) -> &mut $t { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] ::: src/otp/hotp.rs:204:5 [INFO] [stderr] | [INFO] [stderr] 204 | builder_common!(HOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/mod.rs:68:43 [INFO] [stderr] | [INFO] [stderr] 68 | pub fn base32_key(&mut self, key: &String) -> &mut $t { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] ::: src/otp/hotp.rs:204:5 [INFO] [stderr] | [INFO] [stderr] 204 | builder_common!(HOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/otp/mod.rs:95:45 [INFO] [stderr] | [INFO] [stderr] 95 | pub fn output_base(&mut self, base: &Vec) -> &mut $t { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] ::: src/otp/hotp.rs:204:5 [INFO] [stderr] | [INFO] [stderr] 204 | builder_common!(HOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [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] 95 | pub fn output_base(&mut self, base: &[u8]) -> &mut $t { [INFO] [stderr] | ^^^^^ [INFO] [stderr] help: change `base.clone()` to [INFO] [stderr] | [INFO] [stderr] 96 | self.output_base = base.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/otp/hotp.rs:214:9 [INFO] [stderr] | [INFO] [stderr] 214 | / match self.runtime_error { [INFO] [stderr] 215 | | Some(e) => return Err(e), [INFO] [stderr] 216 | | None => (), [INFO] [stderr] 217 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(e) = self.runtime_error { return Err(e) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: useless use of `vec!` [INFO] [stderr] --> src/otp/hotp.rs:569:19 [INFO] [stderr] | [INFO] [stderr] 569 | for nb in vec![10, 42, 69, 1024, 0xffffff] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use a slice directly: `&[10, 42, 69, 1024, 0xffffff]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_vec)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stderr] [INFO] [stderr] warning: the loop variable `count` is used to index `examples` [INFO] [stderr] --> src/otp/hotp.rs:657:22 [INFO] [stderr] | [INFO] [stderr] 657 | for count in 0..examples.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 657 | for (count, ) in examples.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/otp/totp.rs:40:43 [INFO] [stderr] | [INFO] [stderr] 40 | (timestamp - self.initial_time) / self.period as u64 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `u64::from(self.period)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/totp.rs:83:34 [INFO] [stderr] | [INFO] [stderr] 83 | pub fn is_valid(&self, code: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `otp::totp::TOTPBuilder` [INFO] [stderr] --> src/otp/totp.rs:147:5 [INFO] [stderr] | [INFO] [stderr] 147 | / pub fn new() -> TOTPBuilder { [INFO] [stderr] 148 | | TOTPBuilder { [INFO] [stderr] 149 | | key: None, [INFO] [stderr] 150 | | timestamp_offset: 0, [INFO] [stderr] ... | [INFO] [stderr] 157 | | } [INFO] [stderr] 158 | | } [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] 145 | impl Default for otp::totp::TOTPBuilder { [INFO] [stderr] 146 | fn default() -> Self { [INFO] [stderr] 147 | Self::new() [INFO] [stderr] 148 | } [INFO] [stderr] 149 | } [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/otp/mod.rs:47:36 [INFO] [stderr] | [INFO] [stderr] 47 | pub fn key(&mut self, key: &Vec) -> &mut $t { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] ::: src/otp/totp.rs:160:5 [INFO] [stderr] | [INFO] [stderr] 160 | builder_common!(TOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [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] 47 | pub fn key(&mut self, key: &[u8]) -> &mut $t { [INFO] [stderr] | ^^^^^ [INFO] [stderr] help: change `key.clone()` to [INFO] [stderr] | [INFO] [stderr] 48 | self.key = Some(key.to_owned()); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/mod.rs:53:42 [INFO] [stderr] | [INFO] [stderr] 53 | pub fn ascii_key(&mut self, key: &String) -> &mut $t { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] ::: src/otp/totp.rs:160:5 [INFO] [stderr] | [INFO] [stderr] 160 | builder_common!(TOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/mod.rs:59:40 [INFO] [stderr] | [INFO] [stderr] 59 | pub fn hex_key(&mut self, key: &String) -> &mut $t { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] ::: src/otp/totp.rs:160:5 [INFO] [stderr] | [INFO] [stderr] 160 | builder_common!(TOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/otp/mod.rs:68:43 [INFO] [stderr] | [INFO] [stderr] 68 | pub fn base32_key(&mut self, key: &String) -> &mut $t { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] ::: src/otp/totp.rs:160:5 [INFO] [stderr] | [INFO] [stderr] 160 | builder_common!(TOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/otp/mod.rs:95:45 [INFO] [stderr] | [INFO] [stderr] 95 | pub fn output_base(&mut self, base: &Vec) -> &mut $t { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] ::: src/otp/totp.rs:160:5 [INFO] [stderr] | [INFO] [stderr] 160 | builder_common!(TOTPBuilder); [INFO] [stderr] | ----------------------------- in this macro invocation [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] 95 | pub fn output_base(&mut self, base: &[u8]) -> &mut $t { [INFO] [stderr] | ^^^^^ [INFO] [stderr] help: change `base.clone()` to [INFO] [stderr] | [INFO] [stderr] 96 | self.output_base = base.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/otp/totp.rs:187:9 [INFO] [stderr] | [INFO] [stderr] 187 | / match self.runtime_error { [INFO] [stderr] 188 | | Some(e) => return Err(e), [INFO] [stderr] 189 | | None => (), [INFO] [stderr] 190 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(e) = self.runtime_error { return Err(e) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: useless use of `vec!` [INFO] [stderr] --> src/otp/totp.rs:514:19 [INFO] [stderr] | [INFO] [stderr] 514 | for nb in vec![10, 42, 69, 1024, 0xffffff] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use a slice directly: `&[10, 42, 69, 1024, 0xffffff]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1.61s [INFO] running `"docker" "inspect" "6bcb0cf4a548c8c32cc9b54dfc90333c5af6a1ceb0697505e8fa1ddcc76c4080"` [INFO] running `"docker" "rm" "-f" "6bcb0cf4a548c8c32cc9b54dfc90333c5af6a1ceb0697505e8fa1ddcc76c4080"` [INFO] [stdout] 6bcb0cf4a548c8c32cc9b54dfc90333c5af6a1ceb0697505e8fa1ddcc76c4080