[INFO] updating cached repository Microtome/websocket-serial-server [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/Microtome/websocket-serial-server [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/Microtome/websocket-serial-server" "work/ex/clippy-test-run/sources/stable/gh/Microtome/websocket-serial-server"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/Microtome/websocket-serial-server'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/Microtome/websocket-serial-server" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Microtome/websocket-serial-server"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Microtome/websocket-serial-server'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 8cb1ffca90402eca6fd30f307b8fbc32c53e71cd [INFO] sha for GitHub repo Microtome/websocket-serial-server: 8cb1ffca90402eca6fd30f307b8fbc32c53e71cd [INFO] validating manifest of Microtome/websocket-serial-server 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 Microtome/websocket-serial-server 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 Microtome/websocket-serial-server [INFO] finished frobbing Microtome/websocket-serial-server [INFO] frobbed toml for Microtome/websocket-serial-server written to work/ex/clippy-test-run/sources/stable/gh/Microtome/websocket-serial-server/Cargo.toml [INFO] started frobbing Microtome/websocket-serial-server [INFO] finished frobbing Microtome/websocket-serial-server [INFO] frobbed toml for Microtome/websocket-serial-server written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Microtome/websocket-serial-server/Cargo.toml [INFO] crate Microtome/websocket-serial-server has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting Microtome/websocket-serial-server 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/gh/Microtome/websocket-serial-server:/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] 66957047b946399f9725b4f2aa0e4a91bae772afc4539d8fdad927fbf1fd3bc7 [INFO] running `"docker" "start" "-a" "66957047b946399f9725b4f2aa0e4a91bae772afc4539d8fdad927fbf1fd3bc7"` [INFO] [stderr] Checking thread-control v0.1.2 [INFO] [stderr] Compiling libudev-sys v0.1.4 [INFO] [stderr] Checking daemonize v0.2.3 [INFO] [stderr] Checking base64 v0.5.2 [INFO] [stderr] Compiling syn v0.12.15 [INFO] [stderr] Checking nix v0.10.0 [INFO] [stderr] Checking hyper v0.10.13 [INFO] [stderr] Checking env_logger v0.4.3 [INFO] [stderr] Checking error-chain v0.10.0 [INFO] [stderr] Checking libudev v0.2.0 [INFO] [stderr] Checking websocket v0.19.2 [INFO] [stderr] Compiling serde_derive_internals v0.22.2 [INFO] [stderr] Checking serialport v2.3.0 [INFO] [stderr] Compiling serde_derive v1.0.36 [INFO] [stderr] Checking websocket_serial_server v0.2.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/serial_support/cfg.rs:106:7 [INFO] [stderr] | [INFO] [stderr] 106 | ws_port: ws_port, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `ws_port` [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/serial_support/cfg.rs:107:7 [INFO] [stderr] | [INFO] [stderr] 107 | bind_address: bind_address, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `bind_address` [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/serial_support/manage.rs:50:7 [INFO] [stderr] | [INFO] [stderr] 50 | receiver: receiver, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `receiver` [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/serial_support/manage.rs:51:7 [INFO] [stderr] | [INFO] [stderr] 51 | subsc_receiver: subsc_receiver, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `subsc_receiver` [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/serial_support/cfg.rs:106:7 [INFO] [stderr] | [INFO] [stderr] 106 | ws_port: ws_port, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `ws_port` [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/serial_support/cfg.rs:107:7 [INFO] [stderr] | [INFO] [stderr] 107 | bind_address: bind_address, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `bind_address` [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/serial_support/manage.rs:50:7 [INFO] [stderr] | [INFO] [stderr] 50 | receiver: receiver, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `receiver` [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/serial_support/manage.rs:51:7 [INFO] [stderr] | [INFO] [stderr] 51 | subsc_receiver: subsc_receiver, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `subsc_receiver` [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/serial_support/cfg.rs:235:5 [INFO] [stderr] | [INFO] [stderr] 235 | / return TomlWsssConfig::merge( [INFO] [stderr] 236 | | cmdline_cfg, [INFO] [stderr] 237 | | TomlWsssConfig::merge( [INFO] [stderr] 238 | | env_cfg, [INFO] [stderr] ... | [INFO] [stderr] 241 | | ) [INFO] [stderr] 242 | | .into(); [INFO] [stderr] | |_______________________^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 235 | TomlWsssConfig::merge( [INFO] [stderr] 236 | cmdline_cfg, [INFO] [stderr] 237 | TomlWsssConfig::merge( [INFO] [stderr] 238 | env_cfg, [INFO] [stderr] 239 | TomlWsssConfig::merge(file_cfg, WsssConfig::default()), [INFO] [stderr] 240 | ), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/serial_support/cfg.rs:235:5 [INFO] [stderr] | [INFO] [stderr] 235 | / return TomlWsssConfig::merge( [INFO] [stderr] 236 | | cmdline_cfg, [INFO] [stderr] 237 | | TomlWsssConfig::merge( [INFO] [stderr] 238 | | env_cfg, [INFO] [stderr] ... | [INFO] [stderr] 241 | | ) [INFO] [stderr] 242 | | .into(); [INFO] [stderr] | |_______________________^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 235 | TomlWsssConfig::merge( [INFO] [stderr] 236 | cmdline_cfg, [INFO] [stderr] 237 | TomlWsssConfig::merge( [INFO] [stderr] 238 | env_cfg, [INFO] [stderr] 239 | TomlWsssConfig::merge(file_cfg, WsssConfig::default()), [INFO] [stderr] 240 | ), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/serial_support/cfg.rs:56:20 [INFO] [stderr] | [INFO] [stderr] 56 | pub fn to_config(self) -> Result { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/serial_support/cfg.rs:60:8 [INFO] [stderr] | [INFO] [stderr] 60 | .unwrap_or(DEFAULT_BIND_ADDR.to_string()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| DEFAULT_BIND_ADDR.to_string())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `default` [INFO] [stderr] --> src/serial_support/cfg.rs:226:20 [INFO] [stderr] | [INFO] [stderr] 226 | let file_cfg = load_env_file() [INFO] [stderr] | ____________________^ [INFO] [stderr] 227 | | .or_else(|| load_etc()) [INFO] [stderr] 228 | | .or_else(|| load_local_file()) [INFO] [stderr] 229 | | .unwrap_or(TomlWsssConfig::default()); [INFO] [stderr] | |___________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 226 | let file_cfg = load_env_file() [INFO] [stderr] 227 | .or_else(|| load_etc()) [INFO] [stderr] 228 | .or_else(|| load_local_file()).unwrap_or_default(); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/serial_support/cfg.rs:228:16 [INFO] [stderr] | [INFO] [stderr] 228 | .or_else(|| load_local_file()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `load_local_file` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/serial_support/cfg.rs:227:16 [INFO] [stderr] | [INFO] [stderr] 227 | .or_else(|| load_etc()) [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove closure as shown: `load_etc` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/serial_support/cfg.rs:276:8 [INFO] [stderr] | [INFO] [stderr] 276 | .unwrap_or(DEFAULT_BIND_ADDR.to_string()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| DEFAULT_BIND_ADDR.to_string())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:155:47 [INFO] [stderr] | [INFO] [stderr] 155 | fn handle_serial_request(&mut self, sub_id: &String, msg: SerialRequest) { [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:177:13 [INFO] [stderr] | [INFO] [stderr] 177 | sub_id: &String, [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 seem to be trying to match on a boolean expression [INFO] [stderr] --> src/serial_support/manage.rs:184:5 [INFO] [stderr] | [INFO] [stderr] 184 | / match base_64 { [INFO] [stderr] 185 | | true => { [INFO] [stderr] 186 | | base64::decode(&data) [INFO] [stderr] 187 | | .map_err(|e| ErrorKind::Base64(e).into()) [INFO] [stderr] ... | [INFO] [stderr] 196 | | } [INFO] [stderr] 197 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 184 | if base_64 { [INFO] [stderr] 185 | base64::decode(&data) [INFO] [stderr] 186 | .map_err(|e| ErrorKind::Base64(e).into()) [INFO] [stderr] 187 | .and_then(|d| self.port_manager.write_port(&port_name, &d)) [INFO] [stderr] 188 | .map(|_| self.send_message(&sub_id, SerialResponse::Wrote { port: port_name }),) [INFO] [stderr] 189 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:201:43 [INFO] [stderr] | [INFO] [stderr] 201 | fn handle_write_lock(&mut self, sub_id: &String, port_name: String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:212:13 [INFO] [stderr] | [INFO] [stderr] 212 | sub_id: &String, [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: passing a unit value to a function [INFO] [stderr] --> src/serial_support/manage.rs:220:11 [INFO] [stderr] | [INFO] [stderr] 220 | / self.send_message( [INFO] [stderr] 221 | | &sub_id, [INFO] [stderr] 222 | | SerialResponse::WriteLockReleased { port: port_name }, [INFO] [stderr] 223 | | ), [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 220 | (), [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:243:42 [INFO] [stderr] | [INFO] [stderr] 243 | fn handle_open_port(&mut self, sub_id: &String, port_name: String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:253:43 [INFO] [stderr] | [INFO] [stderr] 253 | fn handle_list_ports(&mut self, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:274:43 [INFO] [stderr] | [INFO] [stderr] 274 | fn handle_close_port(&mut self, sub_id: &String, port_name: Option) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:282:51 [INFO] [stderr] | [INFO] [stderr] 282 | fn handle_close_port_for_sub(&mut self, sub_id: &String, port_name: String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:292:56 [INFO] [stderr] | [INFO] [stderr] 292 | fn handle_close_all_ports_for_sub(&mut self, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:333:38 [INFO] [stderr] | [INFO] [stderr] 333 | fn send_message(&mut self, sub_id: &String, msg: SerialResponse) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:351:55 [INFO] [stderr] | [INFO] [stderr] 351 | fn broadcast_message_for_port(&mut self, port_name: &String, msg: SerialResponse) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:372:34 [INFO] [stderr] | [INFO] [stderr] 372 | fn check_sub_id(&self, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:378:45 [INFO] [stderr] | [INFO] [stderr] 378 | fn check_owns_writelock(&self, port_name: &String, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:378:62 [INFO] [stderr] | [INFO] [stderr] 378 | fn check_owns_writelock(&self, port_name: &String, sub_id: &String) -> Result<()> { [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/serial_support/messages.rs:108:44 [INFO] [stderr] | [INFO] [stderr] 108 | let json = serde_json::to_string(self).unwrap_or( [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 109 | | "Display SerialRequest: Serialization Failed!" [INFO] [stderr] 110 | | .to_string(), [INFO] [stderr] 111 | | ); [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 108 | let json = serde_json::to_string(self).unwrap_or_else(|_| "Display SerialRequest: Serialization Failed!" [INFO] [stderr] 109 | .to_string()); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/serial_support/messages.rs:281:44 [INFO] [stderr] | [INFO] [stderr] 281 | let json = serde_json::to_string(self).unwrap_or( [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 282 | | "Display SerialResponse: Serialization Failed!" [INFO] [stderr] 283 | | .to_string(), [INFO] [stderr] 284 | | ); [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 281 | let json = serde_json::to_string(self).unwrap_or_else(|_| "Display SerialResponse: Serialization Failed!" [INFO] [stderr] 282 | .to_string()); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `port_manager::PortManager` [INFO] [stderr] --> src/serial_support/port_manager.rs:45:3 [INFO] [stderr] | [INFO] [stderr] 45 | / pub fn new() -> PortManager { [INFO] [stderr] 46 | | PortManager { open_ports: HashMap::new() } [INFO] [stderr] 47 | | } [INFO] [stderr] | |___^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 38 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/port_manager.rs:50:41 [INFO] [stderr] | [INFO] [stderr] 50 | pub fn is_port_open(&self, port_name: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/port_manager.rs:60:42 [INFO] [stderr] | [INFO] [stderr] 60 | pub fn open_port(&mut self, port_name: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/port_manager.rs:87:43 [INFO] [stderr] | [INFO] [stderr] 87 | pub fn close_port(&mut self, port_name: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/port_manager.rs:93:43 [INFO] [stderr] | [INFO] [stderr] 93 | pub fn write_port(&mut self, port_name: &String, data: &[u8]) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/port_manager.rs:103:42 [INFO] [stderr] | [INFO] [stderr] 103 | pub fn read_port(&mut self, port_name: &String, buff: &mut [u8]) -> Result { [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: identical conversion [INFO] [stderr] --> src/serial_support/port_manager.rs:136:53 [INFO] [stderr] | [INFO] [stderr] 136 | map.insert(port_name.to_string(), Err(e.into())); [INFO] [stderr] | ^^^^^^^^ help: consider removing `.into()`: `e` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/serial_support/port_manager.rs:148:34 [INFO] [stderr] | [INFO] [stderr] 148 | HashSet::::from_iter(self.open_ports.keys().map(|k| k.clone())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.open_ports.keys().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/serial_support/port_manager.rs:180:10 [INFO] [stderr] | [INFO] [stderr] 180 | .expect(&format!("Failed to open slave port {}", s_name)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("Failed to open slave port {}", s_name))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/serial_support/port_manager.rs:184:9 [INFO] [stderr] | [INFO] [stderr] 184 | / master [INFO] [stderr] 185 | | .write(serial_msg.as_bytes()) [INFO] [stderr] 186 | | .expect("Write to master failed!"); [INFO] [stderr] | |____________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:25:37 [INFO] [stderr] | [INFO] [stderr] 25 | fn add_port(&mut self, port_name: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:33:40 [INFO] [stderr] | [INFO] [stderr] 33 | fn remove_port(&mut self, port_name: &String) { [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 deriving a `Default` implementation for `sub_manager::SubscriptionManager` [INFO] [stderr] --> src/serial_support/sub_manager.rs:54:3 [INFO] [stderr] | [INFO] [stderr] 54 | / pub fn new() -> SubscriptionManager { [INFO] [stderr] 55 | | SubscriptionManager { subscriptions: HashMap::new() } [INFO] [stderr] 56 | | } [INFO] [stderr] | |___^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 47 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:59:38 [INFO] [stderr] | [INFO] [stderr] 59 | pub fn add_port(&mut self, sub_id: &String, port_name: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:59:58 [INFO] [stderr] | [INFO] [stderr] 59 | pub fn add_port(&mut self, sub_id: &String, port_name: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:71:41 [INFO] [stderr] | [INFO] [stderr] 71 | pub fn remove_port(&mut self, sub_id: &String, port_name: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:71:61 [INFO] [stderr] | [INFO] [stderr] 71 | pub fn remove_port(&mut self, sub_id: &String, port_name: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:82:53 [INFO] [stderr] | [INFO] [stderr] 82 | pub fn remove_port_from_all(&mut self, port_name: &String) { [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/serial_support/sub_manager.rs:92:9 [INFO] [stderr] | [INFO] [stderr] 92 | / match self.subscriptions.get_mut(sid) { [INFO] [stderr] 93 | | Some(sub) => { [INFO] [stderr] 94 | | sub.ports.clear(); [INFO] [stderr] 95 | | } [INFO] [stderr] 96 | | None => {} [INFO] [stderr] 97 | | } [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] 92 | if let Some(sub) = self.subscriptions.get_mut(sid) { [INFO] [stderr] 93 | sub.ports.clear(); [INFO] [stderr] 94 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:121:51 [INFO] [stderr] | [INFO] [stderr] 121 | pub fn check_subscription_exists(&self, sub_id: &String) -> Result<()> { [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 seem to be trying to match on a boolean expression [INFO] [stderr] --> src/serial_support/sub_manager.rs:122:5 [INFO] [stderr] | [INFO] [stderr] 122 | / match self.subscriptions.contains_key(sub_id) { [INFO] [stderr] 123 | | true => Ok(()), [INFO] [stderr] 124 | | false => Err(ErrorKind::SubscriptionNotFound(sub_id.to_string()).into()), [INFO] [stderr] 125 | | } [INFO] [stderr] | |_____^ help: consider using an if/else expression: `if self.subscriptions.contains_key(sub_id) { Ok(()) } else { Err(ErrorKind::SubscriptionNotFound(sub_id.to_string()).into()) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:129:46 [INFO] [stderr] | [INFO] [stderr] 129 | pub fn end_subscription(&mut self, sub_id: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:134:38 [INFO] [stderr] | [INFO] [stderr] 134 | pub fn send_message(&self, sub_id: &String, msg: SerialResponse) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:161:55 [INFO] [stderr] | [INFO] [stderr] 161 | pub fn broadcast_message_for_port(&self, port_name: &String, msg: SerialResponse) -> Vec { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with position. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/serial_support/sub_manager.rs:169:10 [INFO] [stderr] | [INFO] [stderr] 169 | if sub [INFO] [stderr] | __________^ [INFO] [stderr] 170 | | .ports [INFO] [stderr] 171 | | .iter() [INFO] [stderr] 172 | | .position(|p| *p == *port_name) [INFO] [stderr] 173 | | .is_some() { [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = note: replace `position(|p| *p == *port_name).is_some()` with `any(|p| *p == *port_name)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/serial_support/sub_manager.rs:271:13 [INFO] [stderr] | [INFO] [stderr] 271 | assert!(all_res.len() == 0, "There should be no errors"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `all_res.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: length comparison to zero [INFO] [stderr] --> src/serial_support/sub_manager.rs:283:13 [INFO] [stderr] | [INFO] [stderr] 283 | assert!(all_res.len() == 0, "There should be no errors"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `all_res.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: length comparison to zero [INFO] [stderr] --> src/serial_support/sub_manager.rs:292:13 [INFO] [stderr] | [INFO] [stderr] 292 | assert!(all_res.len() == 0, "There should be no errors"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `all_res.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 should consider deriving a `Default` implementation for `writelock_manager::WriteLockManager` [INFO] [stderr] --> src/serial_support/writelock_manager.rs:13:3 [INFO] [stderr] | [INFO] [stderr] 13 | / pub fn new() -> WriteLockManager { [INFO] [stderr] 14 | | WriteLockManager { write_locks: HashMap::new() } [INFO] [stderr] 15 | | } [INFO] [stderr] | |___^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 6 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:18:52 [INFO] [stderr] | [INFO] [stderr] 18 | pub fn is_port_write_locked_by(&self, port_name: &String, sub_id: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:18:69 [INFO] [stderr] | [INFO] [stderr] 18 | pub fn is_port_write_locked_by(&self, port_name: &String, sub_id: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:26:49 [INFO] [stderr] | [INFO] [stderr] 26 | pub fn is_port_write_locked(&self, port_name: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:31:59 [INFO] [stderr] | [INFO] [stderr] 31 | pub fn is_port_locked_by_someone_else(&self, port_name: &String, sub_id: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:31:76 [INFO] [stderr] | [INFO] [stderr] 31 | pub fn is_port_locked_by_someone_else(&self, port_name: &String, sub_id: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:40:50 [INFO] [stderr] | [INFO] [stderr] 40 | pub fn check_owns_write_lock(&self, port_name: &String, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:40:67 [INFO] [stderr] | [INFO] [stderr] 40 | pub fn check_owns_write_lock(&self, port_name: &String, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:54:43 [INFO] [stderr] | [INFO] [stderr] 54 | pub fn clear_lock(&mut self, port_name: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:59:44 [INFO] [stderr] | [INFO] [stderr] 59 | pub fn unlock_port(&mut self, port_name: &String, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:59:61 [INFO] [stderr] | [INFO] [stderr] 59 | pub fn unlock_port(&mut self, port_name: &String, sub_id: &String) -> Result<()> { [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: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/serial_support/cfg.rs:56:20 [INFO] [stderr] | [INFO] [stderr] 56 | pub fn to_config(self) -> Result { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/serial_support/writelock_manager.rs:60:5 [INFO] [stderr] | [INFO] [stderr] 60 | / match self.is_port_locked_by_someone_else(port_name, sub_id) { [INFO] [stderr] 61 | | false => { [INFO] [stderr] 62 | | self.write_locks.remove(port_name); [INFO] [stderr] 63 | | Ok(()) [INFO] [stderr] 64 | | } [INFO] [stderr] 65 | | true => Err(ErrorKind::AlreadyWriteLocked(port_name.to_string()).into()), [INFO] [stderr] 66 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 60 | if self.is_port_locked_by_someone_else(port_name, sub_id) { Err(ErrorKind::AlreadyWriteLocked(port_name.to_string()).into()) } else { [INFO] [stderr] 61 | self.write_locks.remove(port_name); [INFO] [stderr] 62 | Ok(()) [INFO] [stderr] 63 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:70:57 [INFO] [stderr] | [INFO] [stderr] 70 | pub fn unlock_port_if_locked_by(&mut self, port_name: &String, sub_id: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:70:74 [INFO] [stderr] | [INFO] [stderr] 70 | pub fn unlock_port_if_locked_by(&mut self, port_name: &String, sub_id: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:78:54 [INFO] [stderr] | [INFO] [stderr] 78 | pub fn unlock_all_ports_for_sub(&mut self, sub_id: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:95:42 [INFO] [stderr] | [INFO] [stderr] 95 | pub fn lock_port(&mut self, port_name: &String, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:95:59 [INFO] [stderr] | [INFO] [stderr] 95 | pub fn lock_port(&mut self, port_name: &String, sub_id: &String) -> Result<()> { [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 seem to be trying to match on a boolean expression [INFO] [stderr] --> src/serial_support/writelock_manager.rs:96:5 [INFO] [stderr] | [INFO] [stderr] 96 | / match self.is_port_locked_by_someone_else(port_name, sub_id) { [INFO] [stderr] 97 | | false => { [INFO] [stderr] 98 | | self [INFO] [stderr] 99 | | .write_locks [INFO] [stderr] ... | [INFO] [stderr] 103 | | true => Err(ErrorKind::AlreadyWriteLocked(port_name.to_string()).into()), [INFO] [stderr] 104 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 96 | if self.is_port_locked_by_someone_else(port_name, sub_id) { Err(ErrorKind::AlreadyWriteLocked(port_name.to_string()).into()) } else { [INFO] [stderr] 97 | self [INFO] [stderr] 98 | .write_locks [INFO] [stderr] 99 | .insert(port_name.to_string(), sub_id.to_string()); [INFO] [stderr] 100 | Ok(()) [INFO] [stderr] 101 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/serial_support/cfg.rs:60:8 [INFO] [stderr] | [INFO] [stderr] 60 | .unwrap_or(DEFAULT_BIND_ADDR.to_string()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| DEFAULT_BIND_ADDR.to_string())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:119:13 [INFO] [stderr] | [INFO] [stderr] 119 | port: &String, [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:143:13 [INFO] [stderr] | [INFO] [stderr] 143 | port: &String, [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:144:19 [INFO] [stderr] | [INFO] [stderr] 144 | sub_locker: &String, [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: use of `unwrap_or` followed by a call to `default` [INFO] [stderr] --> src/serial_support/cfg.rs:226:20 [INFO] [stderr] | [INFO] [stderr] 226 | let file_cfg = load_env_file() [INFO] [stderr] | ____________________^ [INFO] [stderr] 227 | | .or_else(|| load_etc()) [INFO] [stderr] 228 | | .or_else(|| load_local_file()) [INFO] [stderr] 229 | | .unwrap_or(TomlWsssConfig::default()); [INFO] [stderr] | |___________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 226 | let file_cfg = load_env_file() [INFO] [stderr] 227 | .or_else(|| load_etc()) [INFO] [stderr] 228 | .or_else(|| load_local_file()).unwrap_or_default(); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/serial_support/cfg.rs:228:16 [INFO] [stderr] | [INFO] [stderr] 228 | .or_else(|| load_local_file()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `load_local_file` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/serial_support/cfg.rs:227:16 [INFO] [stderr] | [INFO] [stderr] 227 | .or_else(|| load_etc()) [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove closure as shown: `load_etc` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/serial_support/cfg.rs:276:8 [INFO] [stderr] | [INFO] [stderr] 276 | .unwrap_or(DEFAULT_BIND_ADDR.to_string()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| DEFAULT_BIND_ADDR.to_string())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] error: Could not compile `websocket_serial_server`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:155:47 [INFO] [stderr] | [INFO] [stderr] 155 | fn handle_serial_request(&mut self, sub_id: &String, msg: SerialRequest) { [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:177:13 [INFO] [stderr] | [INFO] [stderr] 177 | sub_id: &String, [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 seem to be trying to match on a boolean expression [INFO] [stderr] --> src/serial_support/manage.rs:184:5 [INFO] [stderr] | [INFO] [stderr] 184 | / match base_64 { [INFO] [stderr] 185 | | true => { [INFO] [stderr] 186 | | base64::decode(&data) [INFO] [stderr] 187 | | .map_err(|e| ErrorKind::Base64(e).into()) [INFO] [stderr] ... | [INFO] [stderr] 196 | | } [INFO] [stderr] 197 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 184 | if base_64 { [INFO] [stderr] 185 | base64::decode(&data) [INFO] [stderr] 186 | .map_err(|e| ErrorKind::Base64(e).into()) [INFO] [stderr] 187 | .and_then(|d| self.port_manager.write_port(&port_name, &d)) [INFO] [stderr] 188 | .map(|_| self.send_message(&sub_id, SerialResponse::Wrote { port: port_name }),) [INFO] [stderr] 189 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:201:43 [INFO] [stderr] | [INFO] [stderr] 201 | fn handle_write_lock(&mut self, sub_id: &String, port_name: String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:212:13 [INFO] [stderr] | [INFO] [stderr] 212 | sub_id: &String, [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: passing a unit value to a function [INFO] [stderr] --> src/serial_support/manage.rs:220:11 [INFO] [stderr] | [INFO] [stderr] 220 | / self.send_message( [INFO] [stderr] 221 | | &sub_id, [INFO] [stderr] 222 | | SerialResponse::WriteLockReleased { port: port_name }, [INFO] [stderr] 223 | | ), [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 220 | (), [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:243:42 [INFO] [stderr] | [INFO] [stderr] 243 | fn handle_open_port(&mut self, sub_id: &String, port_name: String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:253:43 [INFO] [stderr] | [INFO] [stderr] 253 | fn handle_list_ports(&mut self, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:274:43 [INFO] [stderr] | [INFO] [stderr] 274 | fn handle_close_port(&mut self, sub_id: &String, port_name: Option) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:282:51 [INFO] [stderr] | [INFO] [stderr] 282 | fn handle_close_port_for_sub(&mut self, sub_id: &String, port_name: String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:292:56 [INFO] [stderr] | [INFO] [stderr] 292 | fn handle_close_all_ports_for_sub(&mut self, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:333:38 [INFO] [stderr] | [INFO] [stderr] 333 | fn send_message(&mut self, sub_id: &String, msg: SerialResponse) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:351:55 [INFO] [stderr] | [INFO] [stderr] 351 | fn broadcast_message_for_port(&mut self, port_name: &String, msg: SerialResponse) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:372:34 [INFO] [stderr] | [INFO] [stderr] 372 | fn check_sub_id(&self, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:378:45 [INFO] [stderr] | [INFO] [stderr] 378 | fn check_owns_writelock(&self, port_name: &String, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/manage.rs:378:62 [INFO] [stderr] | [INFO] [stderr] 378 | fn check_owns_writelock(&self, port_name: &String, sub_id: &String) -> Result<()> { [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/serial_support/messages.rs:108:44 [INFO] [stderr] | [INFO] [stderr] 108 | let json = serde_json::to_string(self).unwrap_or( [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 109 | | "Display SerialRequest: Serialization Failed!" [INFO] [stderr] 110 | | .to_string(), [INFO] [stderr] 111 | | ); [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 108 | let json = serde_json::to_string(self).unwrap_or_else(|_| "Display SerialRequest: Serialization Failed!" [INFO] [stderr] 109 | .to_string()); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/serial_support/messages.rs:281:44 [INFO] [stderr] | [INFO] [stderr] 281 | let json = serde_json::to_string(self).unwrap_or( [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 282 | | "Display SerialResponse: Serialization Failed!" [INFO] [stderr] 283 | | .to_string(), [INFO] [stderr] 284 | | ); [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 281 | let json = serde_json::to_string(self).unwrap_or_else(|_| "Display SerialResponse: Serialization Failed!" [INFO] [stderr] 282 | .to_string()); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `port_manager::PortManager` [INFO] [stderr] --> src/serial_support/port_manager.rs:45:3 [INFO] [stderr] | [INFO] [stderr] 45 | / pub fn new() -> PortManager { [INFO] [stderr] 46 | | PortManager { open_ports: HashMap::new() } [INFO] [stderr] 47 | | } [INFO] [stderr] | |___^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 38 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/port_manager.rs:50:41 [INFO] [stderr] | [INFO] [stderr] 50 | pub fn is_port_open(&self, port_name: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/port_manager.rs:60:42 [INFO] [stderr] | [INFO] [stderr] 60 | pub fn open_port(&mut self, port_name: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/port_manager.rs:87:43 [INFO] [stderr] | [INFO] [stderr] 87 | pub fn close_port(&mut self, port_name: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/port_manager.rs:93:43 [INFO] [stderr] | [INFO] [stderr] 93 | pub fn write_port(&mut self, port_name: &String, data: &[u8]) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/port_manager.rs:103:42 [INFO] [stderr] | [INFO] [stderr] 103 | pub fn read_port(&mut self, port_name: &String, buff: &mut [u8]) -> Result { [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: identical conversion [INFO] [stderr] --> src/serial_support/port_manager.rs:136:53 [INFO] [stderr] | [INFO] [stderr] 136 | map.insert(port_name.to_string(), Err(e.into())); [INFO] [stderr] | ^^^^^^^^ help: consider removing `.into()`: `e` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/serial_support/port_manager.rs:148:34 [INFO] [stderr] | [INFO] [stderr] 148 | HashSet::::from_iter(self.open_ports.keys().map(|k| k.clone())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.open_ports.keys().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:25:37 [INFO] [stderr] | [INFO] [stderr] 25 | fn add_port(&mut self, port_name: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:33:40 [INFO] [stderr] | [INFO] [stderr] 33 | fn remove_port(&mut self, port_name: &String) { [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 deriving a `Default` implementation for `sub_manager::SubscriptionManager` [INFO] [stderr] --> src/serial_support/sub_manager.rs:54:3 [INFO] [stderr] | [INFO] [stderr] 54 | / pub fn new() -> SubscriptionManager { [INFO] [stderr] 55 | | SubscriptionManager { subscriptions: HashMap::new() } [INFO] [stderr] 56 | | } [INFO] [stderr] | |___^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 47 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:59:38 [INFO] [stderr] | [INFO] [stderr] 59 | pub fn add_port(&mut self, sub_id: &String, port_name: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:59:58 [INFO] [stderr] | [INFO] [stderr] 59 | pub fn add_port(&mut self, sub_id: &String, port_name: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:71:41 [INFO] [stderr] | [INFO] [stderr] 71 | pub fn remove_port(&mut self, sub_id: &String, port_name: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:71:61 [INFO] [stderr] | [INFO] [stderr] 71 | pub fn remove_port(&mut self, sub_id: &String, port_name: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:82:53 [INFO] [stderr] | [INFO] [stderr] 82 | pub fn remove_port_from_all(&mut self, port_name: &String) { [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/serial_support/sub_manager.rs:92:9 [INFO] [stderr] | [INFO] [stderr] 92 | / match self.subscriptions.get_mut(sid) { [INFO] [stderr] 93 | | Some(sub) => { [INFO] [stderr] 94 | | sub.ports.clear(); [INFO] [stderr] 95 | | } [INFO] [stderr] 96 | | None => {} [INFO] [stderr] 97 | | } [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] 92 | if let Some(sub) = self.subscriptions.get_mut(sid) { [INFO] [stderr] 93 | sub.ports.clear(); [INFO] [stderr] 94 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:121:51 [INFO] [stderr] | [INFO] [stderr] 121 | pub fn check_subscription_exists(&self, sub_id: &String) -> Result<()> { [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 seem to be trying to match on a boolean expression [INFO] [stderr] --> src/serial_support/sub_manager.rs:122:5 [INFO] [stderr] | [INFO] [stderr] 122 | / match self.subscriptions.contains_key(sub_id) { [INFO] [stderr] 123 | | true => Ok(()), [INFO] [stderr] 124 | | false => Err(ErrorKind::SubscriptionNotFound(sub_id.to_string()).into()), [INFO] [stderr] 125 | | } [INFO] [stderr] | |_____^ help: consider using an if/else expression: `if self.subscriptions.contains_key(sub_id) { Ok(()) } else { Err(ErrorKind::SubscriptionNotFound(sub_id.to_string()).into()) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:129:46 [INFO] [stderr] | [INFO] [stderr] 129 | pub fn end_subscription(&mut self, sub_id: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:134:38 [INFO] [stderr] | [INFO] [stderr] 134 | pub fn send_message(&self, sub_id: &String, msg: SerialResponse) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/sub_manager.rs:161:55 [INFO] [stderr] | [INFO] [stderr] 161 | pub fn broadcast_message_for_port(&self, port_name: &String, msg: SerialResponse) -> Vec { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with position. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/serial_support/sub_manager.rs:169:10 [INFO] [stderr] | [INFO] [stderr] 169 | if sub [INFO] [stderr] | __________^ [INFO] [stderr] 170 | | .ports [INFO] [stderr] 171 | | .iter() [INFO] [stderr] 172 | | .position(|p| *p == *port_name) [INFO] [stderr] 173 | | .is_some() { [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = note: replace `position(|p| *p == *port_name).is_some()` with `any(|p| *p == *port_name)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `writelock_manager::WriteLockManager` [INFO] [stderr] --> src/serial_support/writelock_manager.rs:13:3 [INFO] [stderr] | [INFO] [stderr] 13 | / pub fn new() -> WriteLockManager { [INFO] [stderr] 14 | | WriteLockManager { write_locks: HashMap::new() } [INFO] [stderr] 15 | | } [INFO] [stderr] | |___^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 6 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:18:52 [INFO] [stderr] | [INFO] [stderr] 18 | pub fn is_port_write_locked_by(&self, port_name: &String, sub_id: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:18:69 [INFO] [stderr] | [INFO] [stderr] 18 | pub fn is_port_write_locked_by(&self, port_name: &String, sub_id: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:26:49 [INFO] [stderr] | [INFO] [stderr] 26 | pub fn is_port_write_locked(&self, port_name: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:31:59 [INFO] [stderr] | [INFO] [stderr] 31 | pub fn is_port_locked_by_someone_else(&self, port_name: &String, sub_id: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:31:76 [INFO] [stderr] | [INFO] [stderr] 31 | pub fn is_port_locked_by_someone_else(&self, port_name: &String, sub_id: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:40:50 [INFO] [stderr] | [INFO] [stderr] 40 | pub fn check_owns_write_lock(&self, port_name: &String, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:40:67 [INFO] [stderr] | [INFO] [stderr] 40 | pub fn check_owns_write_lock(&self, port_name: &String, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:54:43 [INFO] [stderr] | [INFO] [stderr] 54 | pub fn clear_lock(&mut self, port_name: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:59:44 [INFO] [stderr] | [INFO] [stderr] 59 | pub fn unlock_port(&mut self, port_name: &String, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:59:61 [INFO] [stderr] | [INFO] [stderr] 59 | pub fn unlock_port(&mut self, port_name: &String, sub_id: &String) -> Result<()> { [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 seem to be trying to match on a boolean expression [INFO] [stderr] --> src/serial_support/writelock_manager.rs:60:5 [INFO] [stderr] | [INFO] [stderr] 60 | / match self.is_port_locked_by_someone_else(port_name, sub_id) { [INFO] [stderr] 61 | | false => { [INFO] [stderr] 62 | | self.write_locks.remove(port_name); [INFO] [stderr] 63 | | Ok(()) [INFO] [stderr] 64 | | } [INFO] [stderr] 65 | | true => Err(ErrorKind::AlreadyWriteLocked(port_name.to_string()).into()), [INFO] [stderr] 66 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 60 | if self.is_port_locked_by_someone_else(port_name, sub_id) { Err(ErrorKind::AlreadyWriteLocked(port_name.to_string()).into()) } else { [INFO] [stderr] 61 | self.write_locks.remove(port_name); [INFO] [stderr] 62 | Ok(()) [INFO] [stderr] 63 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:70:57 [INFO] [stderr] | [INFO] [stderr] 70 | pub fn unlock_port_if_locked_by(&mut self, port_name: &String, sub_id: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:70:74 [INFO] [stderr] | [INFO] [stderr] 70 | pub fn unlock_port_if_locked_by(&mut self, port_name: &String, sub_id: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:78:54 [INFO] [stderr] | [INFO] [stderr] 78 | pub fn unlock_all_ports_for_sub(&mut self, sub_id: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:95:42 [INFO] [stderr] | [INFO] [stderr] 95 | pub fn lock_port(&mut self, port_name: &String, sub_id: &String) -> Result<()> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/serial_support/writelock_manager.rs:95:59 [INFO] [stderr] | [INFO] [stderr] 95 | pub fn lock_port(&mut self, port_name: &String, sub_id: &String) -> Result<()> { [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 seem to be trying to match on a boolean expression [INFO] [stderr] --> src/serial_support/writelock_manager.rs:96:5 [INFO] [stderr] | [INFO] [stderr] 96 | / match self.is_port_locked_by_someone_else(port_name, sub_id) { [INFO] [stderr] 97 | | false => { [INFO] [stderr] 98 | | self [INFO] [stderr] 99 | | .write_locks [INFO] [stderr] ... | [INFO] [stderr] 103 | | true => Err(ErrorKind::AlreadyWriteLocked(port_name.to_string()).into()), [INFO] [stderr] 104 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 96 | if self.is_port_locked_by_someone_else(port_name, sub_id) { Err(ErrorKind::AlreadyWriteLocked(port_name.to_string()).into()) } else { [INFO] [stderr] 97 | self [INFO] [stderr] 98 | .write_locks [INFO] [stderr] 99 | .insert(port_name.to_string(), sub_id.to_string()); [INFO] [stderr] 100 | Ok(()) [INFO] [stderr] 101 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "66957047b946399f9725b4f2aa0e4a91bae772afc4539d8fdad927fbf1fd3bc7"` [INFO] running `"docker" "rm" "-f" "66957047b946399f9725b4f2aa0e4a91bae772afc4539d8fdad927fbf1fd3bc7"` [INFO] [stdout] 66957047b946399f9725b4f2aa0e4a91bae772afc4539d8fdad927fbf1fd3bc7