[INFO] updating cached repository karlvlam/etcd2-aws-cluster [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/karlvlam/etcd2-aws-cluster [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/karlvlam/etcd2-aws-cluster" "work/ex/clippy-test-run/sources/stable/gh/karlvlam/etcd2-aws-cluster"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/karlvlam/etcd2-aws-cluster'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/karlvlam/etcd2-aws-cluster" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/karlvlam/etcd2-aws-cluster"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/karlvlam/etcd2-aws-cluster'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 9a123aa1f7b73e5761c28f9ed4e53e71b5524a78 [INFO] sha for GitHub repo karlvlam/etcd2-aws-cluster: 9a123aa1f7b73e5761c28f9ed4e53e71b5524a78 [INFO] validating manifest of karlvlam/etcd2-aws-cluster 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 karlvlam/etcd2-aws-cluster 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 karlvlam/etcd2-aws-cluster [INFO] finished frobbing karlvlam/etcd2-aws-cluster [INFO] frobbed toml for karlvlam/etcd2-aws-cluster written to work/ex/clippy-test-run/sources/stable/gh/karlvlam/etcd2-aws-cluster/Cargo.toml [INFO] started frobbing karlvlam/etcd2-aws-cluster [INFO] finished frobbing karlvlam/etcd2-aws-cluster [INFO] frobbed toml for karlvlam/etcd2-aws-cluster written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/karlvlam/etcd2-aws-cluster/Cargo.toml [INFO] crate karlvlam/etcd2-aws-cluster 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 karlvlam/etcd2-aws-cluster against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-3/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/karlvlam/etcd2-aws-cluster:/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] 44689c1e1649dd64c02739cce63c3d985b2a54bef977aff9e5b193d76206abc3 [INFO] running `"docker" "start" "-a" "44689c1e1649dd64c02739cce63c3d985b2a54bef977aff9e5b193d76206abc3"` [INFO] [stderr] Compiling matches v0.1.4 [INFO] [stderr] Compiling unicode-normalization v0.1.4 [INFO] [stderr] Compiling openssl v0.9.10 [INFO] [stderr] Compiling regex-syntax v0.4.0 [INFO] [stderr] Checking lazy_static v0.2.5 [INFO] [stderr] Compiling httparse v1.2.1 [INFO] [stderr] Compiling rustc-serialize v0.3.23 [INFO] [stderr] Compiling serde v0.9.12 [INFO] [stderr] Compiling ring v0.6.3 [INFO] [stderr] Checking untrusted v0.3.2 [INFO] [stderr] Checking md5 v0.3.3 [INFO] [stderr] Compiling thread-id v3.0.0 [INFO] [stderr] Compiling memchr v1.0.1 [INFO] [stderr] Compiling num_cpus v1.3.0 [INFO] [stderr] Compiling time v0.1.36 [INFO] [stderr] Compiling unreachable v0.1.1 [INFO] [stderr] Compiling mime v0.2.3 [INFO] [stderr] Compiling unicode-bidi v0.2.5 [INFO] [stderr] Checking serde_json v0.8.6 [INFO] [stderr] Compiling aho-corasick v0.6.3 [INFO] [stderr] Compiling deque v0.3.1 [INFO] [stderr] Compiling thread_local v0.3.3 [INFO] [stderr] Compiling rayon v0.6.0 [INFO] [stderr] Compiling unicase v1.4.0 [INFO] [stderr] Compiling idna v0.1.0 [INFO] [stderr] Checking serde_urlencoded v0.3.0 [INFO] [stderr] Checking chrono v0.2.25 [INFO] [stderr] Compiling regex v0.2.1 [INFO] [stderr] Compiling url v1.4.0 [INFO] [stderr] Checking native-tls v0.1.1 [INFO] [stderr] Compiling hyper v0.10.5 [INFO] [stderr] Compiling Inflector v0.7.0 [INFO] [stderr] Checking reqwest v0.3.0 [INFO] [stderr] Checking hyper-native-tls v0.2.2 [INFO] [stderr] Compiling serde_json v0.9.9 [INFO] [stderr] Checking rusoto_credential v0.5.0 [INFO] [stderr] Compiling rusoto_codegen v0.7.1 [INFO] [stderr] Compiling rusoto v0.23.1 [INFO] [stderr] Checking etcd2-aws-cluster v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: literal with an empty format string [INFO] [stderr] --> src/main.rs:138:26 [INFO] [stderr] | [INFO] [stderr] 138 | 0, min_etcd_node); [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::print_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stderr] [INFO] [stderr] warning: literal with an empty format string [INFO] [stderr] --> src/main.rs:138:26 [INFO] [stderr] | [INFO] [stderr] 138 | 0, min_etcd_node); [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::print_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::borrow::ToOwned` [INFO] [stderr] --> src/main.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use std::borrow::ToOwned; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Add` [INFO] [stderr] --> src/main.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | use std::ops::Add; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AutoScalingGroupNamesType` [INFO] [stderr] --> src/main.rs:24:46 [INFO] [stderr] | [INFO] [stderr] 24 | use rusoto::autoscaling::{AutoscalingClient, AutoScalingGroupNamesType, AutoScalingGroup}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: immediately dereferencing a reference [INFO] [stderr] --> src/main.rs:559:30 [INFO] [stderr] | [INFO] [stderr] 559 | &m.name == "" && *&m.peerURLs[0].contains(&format!("//{}:", etcd_self_ip)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `m.peerURLs[0].contains(&format!("//{}:", etcd_self_ip))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deref_addrof)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deref_addrof [INFO] [stderr] [INFO] [stderr] warning: unused variable: `e` [INFO] [stderr] --> src/main.rs:94:13 [INFO] [stderr] | [INFO] [stderr] 94 | Err(e) => { [INFO] [stderr] | ^ help: consider using `_e` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: value assigned to `etcd_ec2_infos` is never read [INFO] [stderr] --> src/main.rs:123:13 [INFO] [stderr] | [INFO] [stderr] 123 | let mut etcd_ec2_infos:Vec = vec![]; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `ec2infos` [INFO] [stderr] --> src/main.rs:126:13 [INFO] [stderr] | [INFO] [stderr] 126 | let ec2infos = match extract_ec2info_from_asg_name(&ASG_NAME, AWS_REGION) { [INFO] [stderr] | ^^^^^^^^ help: consider using `_ec2infos` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `count` [INFO] [stderr] --> src/main.rs:302:9 [INFO] [stderr] | [INFO] [stderr] 302 | let count = Cell::new(1); [INFO] [stderr] | ^^^^^ help: consider using `_count` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `e` [INFO] [stderr] --> src/main.rs:523:13 [INFO] [stderr] | [INFO] [stderr] 523 | Err(e) => None [INFO] [stderr] | ^ help: consider using `_e` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `e` [INFO] [stderr] --> src/main.rs:533:13 [INFO] [stderr] | [INFO] [stderr] 533 | Err(e) => None [INFO] [stderr] | ^ help: consider using `_e` instead [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `api_add_ok` [INFO] [stderr] --> src/main.rs:31:1 [INFO] [stderr] | [INFO] [stderr] 31 | const api_add_ok: u16 = 201; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `api_already_added` [INFO] [stderr] --> src/main.rs:32:1 [INFO] [stderr] | [INFO] [stderr] 32 | const api_already_added: u16 = 409; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `api_delete_ok` [INFO] [stderr] --> src/main.rs:33:1 [INFO] [stderr] | [INFO] [stderr] 33 | const api_delete_ok: u16 = 204; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `api_delete_gone` [INFO] [stderr] --> src/main.rs:34:1 [INFO] [stderr] | [INFO] [stderr] 34 | const api_delete_gone: u16 = 410; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `Ec2Info` [INFO] [stderr] --> src/main.rs:390:1 [INFO] [stderr] | [INFO] [stderr] 390 | struct Ec2Info { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `min_etcd_node` should have an upper case name such as `MIN_ETCD_NODE` [INFO] [stderr] --> src/main.rs:28:1 [INFO] [stderr] | [INFO] [stderr] 28 | const min_etcd_node:usize = 3; // etcd cluster should has at least 3 nodes !!! [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_upper_case_globals)] on by default [INFO] [stderr] [INFO] [stderr] warning: constant `api_add_ok` should have an upper case name such as `API_ADD_OK` [INFO] [stderr] --> src/main.rs:31:1 [INFO] [stderr] | [INFO] [stderr] 31 | const api_add_ok: u16 = 201; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `api_already_added` should have an upper case name such as `API_ALREADY_ADDED` [INFO] [stderr] --> src/main.rs:32:1 [INFO] [stderr] | [INFO] [stderr] 32 | const api_already_added: u16 = 409; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `api_delete_ok` should have an upper case name such as `API_DELETE_OK` [INFO] [stderr] --> src/main.rs:33:1 [INFO] [stderr] | [INFO] [stderr] 33 | const api_delete_ok: u16 = 204; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `api_delete_gone` should have an upper case name such as `API_DELETE_GONE` [INFO] [stderr] --> src/main.rs:34:1 [INFO] [stderr] | [INFO] [stderr] 34 | const api_delete_gone: u16 = 410; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `INSTANCE_ADDR` should have a snake case name such as `instance_addr` [INFO] [stderr] --> src/main.rs:42:9 [INFO] [stderr] | [INFO] [stderr] 42 | let INSTANCE_ADDR = match std::env::var("DEBUG") { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `CLIENT_PORT` should have a snake case name such as `client_port` [INFO] [stderr] --> src/main.rs:48:9 [INFO] [stderr] | [INFO] [stderr] 48 | let CLIENT_PORT = env("ETCD_CLIENT_PORT", "2379"); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `SERVER_PORT` should have a snake case name such as `server_port` [INFO] [stderr] --> src/main.rs:49:9 [INFO] [stderr] | [INFO] [stderr] 49 | let SERVER_PORT = env("ETCD_SERVER_PORT", "2380"); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `CLIENT_SCHEME` should have a snake case name such as `client_scheme` [INFO] [stderr] --> src/main.rs:50:9 [INFO] [stderr] | [INFO] [stderr] 50 | let CLIENT_SCHEME = env("ETCD_CLIENT_SCHEME", "http"); [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `PEER_SCHEME` should have a snake case name such as `peer_scheme` [INFO] [stderr] --> src/main.rs:51:9 [INFO] [stderr] | [INFO] [stderr] 51 | let PEER_SCHEME = env("ETCD_PEER_SCHEME", "http"); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `AWS_REGION` should have a snake case name such as `aws_region` [INFO] [stderr] --> src/main.rs:65:9 [INFO] [stderr] | [INFO] [stderr] 65 | let AWS_REGION: Region = get_region_from_string(&awsid.region); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `PROXY_ASG` should have a snake case name such as `proxy_asg` [INFO] [stderr] --> src/main.rs:76:10 [INFO] [stderr] | [INFO] [stderr] 76 | let (PROXY_ASG, ASG_NAME) = match std::env::var("PROXY_ASG") { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `ASG_NAME` should have a snake case name such as `asg_name` [INFO] [stderr] --> src/main.rs:76:21 [INFO] [stderr] | [INFO] [stderr] 76 | let (PROXY_ASG, ASG_NAME) = match std::env::var("PROXY_ASG") { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let ec2infos =` [INFO] [stderr] --> src/main.rs:126:9 [INFO] [stderr] | [INFO] [stderr] 126 | / let ec2infos = match extract_ec2info_from_asg_name(&ASG_NAME, AWS_REGION) { [INFO] [stderr] 127 | | Some(ec2infos) => { [INFO] [stderr] 128 | | if ec2infos.len() >= min_etcd_node { [INFO] [stderr] 129 | | etcd_ec2_infos = ec2infos; [INFO] [stderr] ... | [INFO] [stderr] 141 | | [INFO] [stderr] 142 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [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/main.rs:154:9 [INFO] [stderr] | [INFO] [stderr] 154 | / match get_etcd_members(&_item.privateIp, &CLIENT_SCHEME, &CLIENT_PORT) { [INFO] [stderr] 155 | | Some(list) => { [INFO] [stderr] 156 | | etcd_active_node = _item.privateIp.to_string(); [INFO] [stderr] 157 | | etcd_current_members = list; [INFO] [stderr] ... | [INFO] [stderr] 164 | | } [INFO] [stderr] 165 | | } [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] 154 | if let Some(list) = get_etcd_members(&_item.privateIp, &CLIENT_SCHEME, &CLIENT_PORT) { [INFO] [stderr] 155 | etcd_active_node = _item.privateIp.to_string(); [INFO] [stderr] 156 | etcd_current_members = list; [INFO] [stderr] 157 | etcd_active_node_client_url = format!("{}://{}:{}", [INFO] [stderr] 158 | &CLIENT_SCHEME,&etcd_active_node,&CLIENT_PORT); [INFO] [stderr] 159 | break; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/main.rs:173:8 [INFO] [stderr] | [INFO] [stderr] 173 | if etcd_current_members.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `etcd_current_members.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/main.rs:208:12 [INFO] [stderr] | [INFO] [stderr] 208 | if _m.clientURLs.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `_m.clientURLs.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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:306:5 [INFO] [stderr] | [INFO] [stderr] 306 | easy.timeout(Duration::from_millis(5000)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:339:5 [INFO] [stderr] | [INFO] [stderr] 339 | easy.timeout(Duration::from_millis(5000)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [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/main.rs:358:46 [INFO] [stderr] | [INFO] [stderr] 358 | fn delete_etcd_members(client_url:&str, list:&Vec){ [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: change this to: `&[EtcdMember]` [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:366:9 [INFO] [stderr] | [INFO] [stderr] 366 | easy.timeout(Duration::from_millis(5000)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: structure field `instanceId` should have a snake case name such as `instance_id` [INFO] [stderr] --> src/main.rs:385:5 [INFO] [stderr] | [INFO] [stderr] 385 | instanceId: String, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: structure field `privateIp` should have a snake case name such as `private_ip` [INFO] [stderr] --> src/main.rs:386:5 [INFO] [stderr] | [INFO] [stderr] 386 | privateIp: String, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: structure field `peerURLs` should have a snake case name such as `peer_urls` [INFO] [stderr] --> src/main.rs:405:5 [INFO] [stderr] | [INFO] [stderr] 405 | peerURLs: Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: structure field `clientURLs` should have a snake case name such as `client_urls` [INFO] [stderr] --> src/main.rs:406:5 [INFO] [stderr] | [INFO] [stderr] 406 | clientURLs: Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/main.rs:409:35 [INFO] [stderr] | [INFO] [stderr] 409 | fn get_region_from_string(region: &String) -> Region { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 409 | fn get_region_from_string(region: &str) -> Region { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `region.as_str()` to [INFO] [stderr] | [INFO] [stderr] 410 | match region { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/main.rs:436:59 [INFO] [stderr] | [INFO] [stderr] 436 | fn asg_name_exists(asgs: Vec, asg_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/main.rs:445:77 [INFO] [stderr] | [INFO] [stderr] 445 | fn find_asg_name_from_instance_id(asgs: Vec, instance_id: &String) -> Option { [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/main.rs:448:9 [INFO] [stderr] | [INFO] [stderr] 448 | / match asg.instances { [INFO] [stderr] 449 | | Some(instances) => { [INFO] [stderr] 450 | | for instance in instances { [INFO] [stderr] 451 | | if &instance.instance_id == instance_id { [INFO] [stderr] ... | [INFO] [stderr] 457 | | } [INFO] [stderr] 458 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 448 | if let Some(instances) = asg.instances { [INFO] [stderr] 449 | for instance in instances { [INFO] [stderr] 450 | if &instance.instance_id == instance_id { [INFO] [stderr] 451 | return Some(asg.auto_scaling_group_name); [INFO] [stderr] 452 | } [INFO] [stderr] 453 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/main.rs:463:44 [INFO] [stderr] | [INFO] [stderr] 463 | fn extract_ec2info_from_asg_name(asg_name: &String, region: Region) -> Option> { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 463 | fn extract_ec2info_from_asg_name(asg_name: &str, region: Region) -> Option> { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `asg_name.clone()` to [INFO] [stderr] | [INFO] [stderr] 473 | values: Some(vec![asg_name.to_string()]) [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/main.rs:538:45 [INFO] [stderr] | [INFO] [stderr] 538 | cluster_list:&Vec, etcd_self_ip: &str) -> String { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: change this to: `&[EtcdMember]` [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/main.rs:547:24 [INFO] [stderr] | [INFO] [stderr] 547 | let mut r:String = match cluster_new { [INFO] [stderr] | ________________________^ [INFO] [stderr] 548 | | true => format!("ETCD_INITIAL_CLUSTER_STATE=new\n"), [INFO] [stderr] 549 | | false => format!("ETCD_INITIAL_CLUSTER_STATE=existing\n") [INFO] [stderr] 550 | | }; [INFO] [stderr] | |_____^ help: consider using an if/else expression: `if cluster_new { format!("ETCD_INITIAL_CLUSTER_STATE=new\n") } else { format!("ETCD_INITIAL_CLUSTER_STATE=existing\n") }` [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] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/main.rs:548:17 [INFO] [stderr] | [INFO] [stderr] 548 | true => format!("ETCD_INITIAL_CLUSTER_STATE=new\n"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"ETCD_INITIAL_CLUSTER_STATE=new\n".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/main.rs:549:18 [INFO] [stderr] | [INFO] [stderr] 549 | false => format!("ETCD_INITIAL_CLUSTER_STATE=existing\n") [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"ETCD_INITIAL_CLUSTER_STATE=existing\n".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/main.rs:560:9 [INFO] [stderr] | [INFO] [stderr] 560 | / match current_node_not_joinned_etcd_cluster { [INFO] [stderr] 561 | | true => { [INFO] [stderr] 562 | | r += &format!("{}={},",etcd_name, &m.peerURLs[0]); [INFO] [stderr] 563 | | } [INFO] [stderr] ... | [INFO] [stderr] 567 | | } [INFO] [stderr] 568 | | } [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] 560 | if current_node_not_joinned_etcd_cluster { [INFO] [stderr] 561 | r += &format!("{}={},",etcd_name, &m.peerURLs[0]); [INFO] [stderr] 562 | } else { [INFO] [stderr] 563 | [INFO] [stderr] 564 | r += &format!("{}={},",&m.name, &m.peerURLs[0]); [INFO] [stderr] 565 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::borrow::ToOwned` [INFO] [stderr] --> src/main.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use std::borrow::ToOwned; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Add` [INFO] [stderr] --> src/main.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | use std::ops::Add; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AutoScalingGroupNamesType` [INFO] [stderr] --> src/main.rs:24:46 [INFO] [stderr] | [INFO] [stderr] 24 | use rusoto::autoscaling::{AutoscalingClient, AutoScalingGroupNamesType, AutoScalingGroup}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: immediately dereferencing a reference [INFO] [stderr] --> src/main.rs:559:30 [INFO] [stderr] | [INFO] [stderr] 559 | &m.name == "" && *&m.peerURLs[0].contains(&format!("//{}:", etcd_self_ip)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `m.peerURLs[0].contains(&format!("//{}:", etcd_self_ip))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deref_addrof)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deref_addrof [INFO] [stderr] [INFO] [stderr] warning: unused variable: `e` [INFO] [stderr] --> src/main.rs:94:13 [INFO] [stderr] | [INFO] [stderr] 94 | Err(e) => { [INFO] [stderr] | ^ help: consider using `_e` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: value assigned to `etcd_ec2_infos` is never read [INFO] [stderr] --> src/main.rs:123:13 [INFO] [stderr] | [INFO] [stderr] 123 | let mut etcd_ec2_infos:Vec = vec![]; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `ec2infos` [INFO] [stderr] --> src/main.rs:126:13 [INFO] [stderr] | [INFO] [stderr] 126 | let ec2infos = match extract_ec2info_from_asg_name(&ASG_NAME, AWS_REGION) { [INFO] [stderr] | ^^^^^^^^ help: consider using `_ec2infos` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `count` [INFO] [stderr] --> src/main.rs:302:9 [INFO] [stderr] | [INFO] [stderr] 302 | let count = Cell::new(1); [INFO] [stderr] | ^^^^^ help: consider using `_count` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `e` [INFO] [stderr] --> src/main.rs:523:13 [INFO] [stderr] | [INFO] [stderr] 523 | Err(e) => None [INFO] [stderr] | ^ help: consider using `_e` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `e` [INFO] [stderr] --> src/main.rs:533:13 [INFO] [stderr] | [INFO] [stderr] 533 | Err(e) => None [INFO] [stderr] | ^ help: consider using `_e` instead [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `api_add_ok` [INFO] [stderr] --> src/main.rs:31:1 [INFO] [stderr] | [INFO] [stderr] 31 | const api_add_ok: u16 = 201; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `api_already_added` [INFO] [stderr] --> src/main.rs:32:1 [INFO] [stderr] | [INFO] [stderr] 32 | const api_already_added: u16 = 409; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `api_delete_ok` [INFO] [stderr] --> src/main.rs:33:1 [INFO] [stderr] | [INFO] [stderr] 33 | const api_delete_ok: u16 = 204; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `api_delete_gone` [INFO] [stderr] --> src/main.rs:34:1 [INFO] [stderr] | [INFO] [stderr] 34 | const api_delete_gone: u16 = 410; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `Ec2Info` [INFO] [stderr] --> src/main.rs:390:1 [INFO] [stderr] | [INFO] [stderr] 390 | struct Ec2Info { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `min_etcd_node` should have an upper case name such as `MIN_ETCD_NODE` [INFO] [stderr] --> src/main.rs:28:1 [INFO] [stderr] | [INFO] [stderr] 28 | const min_etcd_node:usize = 3; // etcd cluster should has at least 3 nodes !!! [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_upper_case_globals)] on by default [INFO] [stderr] [INFO] [stderr] warning: constant `api_add_ok` should have an upper case name such as `API_ADD_OK` [INFO] [stderr] --> src/main.rs:31:1 [INFO] [stderr] | [INFO] [stderr] 31 | const api_add_ok: u16 = 201; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `api_already_added` should have an upper case name such as `API_ALREADY_ADDED` [INFO] [stderr] --> src/main.rs:32:1 [INFO] [stderr] | [INFO] [stderr] 32 | const api_already_added: u16 = 409; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `api_delete_ok` should have an upper case name such as `API_DELETE_OK` [INFO] [stderr] --> src/main.rs:33:1 [INFO] [stderr] | [INFO] [stderr] 33 | const api_delete_ok: u16 = 204; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `api_delete_gone` should have an upper case name such as `API_DELETE_GONE` [INFO] [stderr] --> src/main.rs:34:1 [INFO] [stderr] | [INFO] [stderr] 34 | const api_delete_gone: u16 = 410; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `INSTANCE_ADDR` should have a snake case name such as `instance_addr` [INFO] [stderr] --> src/main.rs:42:9 [INFO] [stderr] | [INFO] [stderr] 42 | let INSTANCE_ADDR = match std::env::var("DEBUG") { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `CLIENT_PORT` should have a snake case name such as `client_port` [INFO] [stderr] --> src/main.rs:48:9 [INFO] [stderr] | [INFO] [stderr] 48 | let CLIENT_PORT = env("ETCD_CLIENT_PORT", "2379"); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `SERVER_PORT` should have a snake case name such as `server_port` [INFO] [stderr] --> src/main.rs:49:9 [INFO] [stderr] | [INFO] [stderr] 49 | let SERVER_PORT = env("ETCD_SERVER_PORT", "2380"); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `CLIENT_SCHEME` should have a snake case name such as `client_scheme` [INFO] [stderr] --> src/main.rs:50:9 [INFO] [stderr] | [INFO] [stderr] 50 | let CLIENT_SCHEME = env("ETCD_CLIENT_SCHEME", "http"); [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `PEER_SCHEME` should have a snake case name such as `peer_scheme` [INFO] [stderr] --> src/main.rs:51:9 [INFO] [stderr] | [INFO] [stderr] 51 | let PEER_SCHEME = env("ETCD_PEER_SCHEME", "http"); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `AWS_REGION` should have a snake case name such as `aws_region` [INFO] [stderr] --> src/main.rs:65:9 [INFO] [stderr] | [INFO] [stderr] 65 | let AWS_REGION: Region = get_region_from_string(&awsid.region); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `PROXY_ASG` should have a snake case name such as `proxy_asg` [INFO] [stderr] --> src/main.rs:76:10 [INFO] [stderr] | [INFO] [stderr] 76 | let (PROXY_ASG, ASG_NAME) = match std::env::var("PROXY_ASG") { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `ASG_NAME` should have a snake case name such as `asg_name` [INFO] [stderr] --> src/main.rs:76:21 [INFO] [stderr] | [INFO] [stderr] 76 | let (PROXY_ASG, ASG_NAME) = match std::env::var("PROXY_ASG") { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let ec2infos =` [INFO] [stderr] --> src/main.rs:126:9 [INFO] [stderr] | [INFO] [stderr] 126 | / let ec2infos = match extract_ec2info_from_asg_name(&ASG_NAME, AWS_REGION) { [INFO] [stderr] 127 | | Some(ec2infos) => { [INFO] [stderr] 128 | | if ec2infos.len() >= min_etcd_node { [INFO] [stderr] 129 | | etcd_ec2_infos = ec2infos; [INFO] [stderr] ... | [INFO] [stderr] 141 | | [INFO] [stderr] 142 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [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/main.rs:154:9 [INFO] [stderr] | [INFO] [stderr] 154 | / match get_etcd_members(&_item.privateIp, &CLIENT_SCHEME, &CLIENT_PORT) { [INFO] [stderr] 155 | | Some(list) => { [INFO] [stderr] 156 | | etcd_active_node = _item.privateIp.to_string(); [INFO] [stderr] 157 | | etcd_current_members = list; [INFO] [stderr] ... | [INFO] [stderr] 164 | | } [INFO] [stderr] 165 | | } [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] 154 | if let Some(list) = get_etcd_members(&_item.privateIp, &CLIENT_SCHEME, &CLIENT_PORT) { [INFO] [stderr] 155 | etcd_active_node = _item.privateIp.to_string(); [INFO] [stderr] 156 | etcd_current_members = list; [INFO] [stderr] 157 | etcd_active_node_client_url = format!("{}://{}:{}", [INFO] [stderr] 158 | &CLIENT_SCHEME,&etcd_active_node,&CLIENT_PORT); [INFO] [stderr] 159 | break; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/main.rs:173:8 [INFO] [stderr] | [INFO] [stderr] 173 | if etcd_current_members.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `etcd_current_members.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/main.rs:208:12 [INFO] [stderr] | [INFO] [stderr] 208 | if _m.clientURLs.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `_m.clientURLs.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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:306:5 [INFO] [stderr] | [INFO] [stderr] 306 | easy.timeout(Duration::from_millis(5000)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:339:5 [INFO] [stderr] | [INFO] [stderr] 339 | easy.timeout(Duration::from_millis(5000)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [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/main.rs:358:46 [INFO] [stderr] | [INFO] [stderr] 358 | fn delete_etcd_members(client_url:&str, list:&Vec){ [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: change this to: `&[EtcdMember]` [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:366:9 [INFO] [stderr] | [INFO] [stderr] 366 | easy.timeout(Duration::from_millis(5000)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: structure field `instanceId` should have a snake case name such as `instance_id` [INFO] [stderr] --> src/main.rs:385:5 [INFO] [stderr] | [INFO] [stderr] 385 | instanceId: String, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: structure field `privateIp` should have a snake case name such as `private_ip` [INFO] [stderr] --> src/main.rs:386:5 [INFO] [stderr] | [INFO] [stderr] 386 | privateIp: String, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: structure field `peerURLs` should have a snake case name such as `peer_urls` [INFO] [stderr] --> src/main.rs:405:5 [INFO] [stderr] | [INFO] [stderr] 405 | peerURLs: Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: structure field `clientURLs` should have a snake case name such as `client_urls` [INFO] [stderr] --> src/main.rs:406:5 [INFO] [stderr] | [INFO] [stderr] 406 | clientURLs: Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/main.rs:409:35 [INFO] [stderr] | [INFO] [stderr] 409 | fn get_region_from_string(region: &String) -> Region { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 409 | fn get_region_from_string(region: &str) -> Region { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `region.as_str()` to [INFO] [stderr] | [INFO] [stderr] 410 | match region { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/main.rs:436:59 [INFO] [stderr] | [INFO] [stderr] 436 | fn asg_name_exists(asgs: Vec, asg_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/main.rs:445:77 [INFO] [stderr] | [INFO] [stderr] 445 | fn find_asg_name_from_instance_id(asgs: Vec, instance_id: &String) -> Option { [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/main.rs:448:9 [INFO] [stderr] | [INFO] [stderr] 448 | / match asg.instances { [INFO] [stderr] 449 | | Some(instances) => { [INFO] [stderr] 450 | | for instance in instances { [INFO] [stderr] 451 | | if &instance.instance_id == instance_id { [INFO] [stderr] ... | [INFO] [stderr] 457 | | } [INFO] [stderr] 458 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 448 | if let Some(instances) = asg.instances { [INFO] [stderr] 449 | for instance in instances { [INFO] [stderr] 450 | if &instance.instance_id == instance_id { [INFO] [stderr] 451 | return Some(asg.auto_scaling_group_name); [INFO] [stderr] 452 | } [INFO] [stderr] 453 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/main.rs:463:44 [INFO] [stderr] | [INFO] [stderr] 463 | fn extract_ec2info_from_asg_name(asg_name: &String, region: Region) -> Option> { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 463 | fn extract_ec2info_from_asg_name(asg_name: &str, region: Region) -> Option> { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `asg_name.clone()` to [INFO] [stderr] | [INFO] [stderr] 473 | values: Some(vec![asg_name.to_string()]) [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/main.rs:538:45 [INFO] [stderr] | [INFO] [stderr] 538 | cluster_list:&Vec, etcd_self_ip: &str) -> String { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: change this to: `&[EtcdMember]` [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/main.rs:547:24 [INFO] [stderr] | [INFO] [stderr] 547 | let mut r:String = match cluster_new { [INFO] [stderr] | ________________________^ [INFO] [stderr] 548 | | true => format!("ETCD_INITIAL_CLUSTER_STATE=new\n"), [INFO] [stderr] 549 | | false => format!("ETCD_INITIAL_CLUSTER_STATE=existing\n") [INFO] [stderr] 550 | | }; [INFO] [stderr] | |_____^ help: consider using an if/else expression: `if cluster_new { format!("ETCD_INITIAL_CLUSTER_STATE=new\n") } else { format!("ETCD_INITIAL_CLUSTER_STATE=existing\n") }` [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] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/main.rs:548:17 [INFO] [stderr] | [INFO] [stderr] 548 | true => format!("ETCD_INITIAL_CLUSTER_STATE=new\n"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"ETCD_INITIAL_CLUSTER_STATE=new\n".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/main.rs:549:18 [INFO] [stderr] | [INFO] [stderr] 549 | false => format!("ETCD_INITIAL_CLUSTER_STATE=existing\n") [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"ETCD_INITIAL_CLUSTER_STATE=existing\n".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/main.rs:560:9 [INFO] [stderr] | [INFO] [stderr] 560 | / match current_node_not_joinned_etcd_cluster { [INFO] [stderr] 561 | | true => { [INFO] [stderr] 562 | | r += &format!("{}={},",etcd_name, &m.peerURLs[0]); [INFO] [stderr] 563 | | } [INFO] [stderr] ... | [INFO] [stderr] 567 | | } [INFO] [stderr] 568 | | } [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] 560 | if current_node_not_joinned_etcd_cluster { [INFO] [stderr] 561 | r += &format!("{}={},",etcd_name, &m.peerURLs[0]); [INFO] [stderr] 562 | } else { [INFO] [stderr] 563 | [INFO] [stderr] 564 | r += &format!("{}={},",&m.name, &m.peerURLs[0]); [INFO] [stderr] 565 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1m 55s [INFO] running `"docker" "inspect" "44689c1e1649dd64c02739cce63c3d985b2a54bef977aff9e5b193d76206abc3"` [INFO] running `"docker" "rm" "-f" "44689c1e1649dd64c02739cce63c3d985b2a54bef977aff9e5b193d76206abc3"` [INFO] [stdout] 44689c1e1649dd64c02739cce63c3d985b2a54bef977aff9e5b193d76206abc3