[INFO] cloning repository https://github.com/Georci/fetchCryptoPrice
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Georci/fetchCryptoPrice" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FGeorci%2FfetchCryptoPrice", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FGeorci%2FfetchCryptoPrice'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 20140db9304acbc735c9ed344936d7cb185c8f48
[INFO] checking Georci/fetchCryptoPrice against master#5a45ab9738330fb317d49e3594c2db5248b1e971 for pr-136303
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FGeorci%2FfetchCryptoPrice" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc1/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/Georci/fetchCryptoPrice on toolchain 5a45ab9738330fb317d49e3594c2db5248b1e971
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+5a45ab9738330fb317d49e3594c2db5248b1e971" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking git repo https://github.com/Georci/fetchCryptoPrice
[INFO] finished tweaking git repo https://github.com/Georci/fetchCryptoPrice
[INFO] tweaked toml for git repo https://github.com/Georci/fetchCryptoPrice written to /workspace/builds/worker-0-tc1/source/Cargo.toml
[INFO] crate git repo https://github.com/Georci/fetchCryptoPrice already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+5a45ab9738330fb317d49e3594c2db5248b1e971" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded gloo-timers v0.2.6
[INFO] [stderr]   Downloaded tokio-socks v0.5.2
[INFO] [stderr]   Downloaded reqwest-websocket v0.4.2
[INFO] [stderr]   Downloaded ethers-etherscan v2.0.14
[INFO] [stderr]   Downloaded ethers-contract-abigen v2.0.14
[INFO] [stderr]   Downloaded ethers-addressbook v2.0.14
[INFO] [stderr]   Downloaded rustls v0.23.13
[INFO] [stderr]   Downloaded diesel_table_macro_syntax v0.2.0
[INFO] [stderr]   Downloaded env_filter v0.1.2
[INFO] [stderr]   Downloaded env_logger v0.11.5
[INFO] [stderr]   Downloaded diesel_derives v2.2.3
[INFO] [stderr]   Downloaded ethers-signers v2.0.14
[INFO] [stderr]   Downloaded ws_stream_wasm v0.7.4
[INFO] [stderr]   Downloaded send_wrapper v0.4.0
[INFO] [stderr]   Downloaded ecdsa v0.16.9
[INFO] [stderr]   Downloaded mysqlclient-sys v0.4.1
[INFO] [stderr]   Downloaded bigdecimal v0.4.5
[INFO] [stderr]   Downloaded coins-bip39 v0.8.7
[INFO] [stderr]   Downloaded ethers-providers v2.0.14
[INFO] [stderr]   Downloaded rkyv v0.7.45
[INFO] [stderr]   Downloaded diesel v2.2.4
[INFO] [stderr]   Downloaded ethers-contract-derive v2.0.14
[INFO] [stderr]   Downloaded lalrpop v0.20.2
[INFO] [stderr]   Downloaded proptest v1.5.0
[INFO] [stderr]   Downloaded quinn-proto v0.11.8
[INFO] [stderr]   Downloaded ethers-core v2.0.14
[INFO] [stderr]   Downloaded mysql_common v0.32.4
[INFO] [stderr]   Downloaded ethers-solc v2.0.14
[INFO] [stderr]   Downloaded rust_decimal v1.36.0
[INFO] [stderr]   Downloaded webpki-roots v0.26.6
[INFO] [stderr]   Downloaded crypto-bigint v0.5.5
[INFO] [stderr]   Downloaded k256 v0.13.4
[INFO] [stderr]   Downloaded mysql v25.0.1
[INFO] [stderr]   Downloaded elliptic-curve v0.13.8
[INFO] [stderr]   Downloaded impl-serde v0.4.0
[INFO] [stderr]   Downloaded parity-scale-codec v3.6.12
[INFO] [stderr]   Downloaded solang-parser v0.3.3
[INFO] [stderr]   Downloaded async-tungstenite v0.27.0
[INFO] [stderr]   Downloaded auto_impl v1.2.0
[INFO] [stderr]   Downloaded svm-rs v0.3.5
[INFO] [stderr]   Downloaded frunk_core v0.4.3
[INFO] [stderr]   Downloaded frunk v0.4.3
[INFO] [stderr]   Downloaded async_io_stream v0.3.3
[INFO] [stderr]   Downloaded pharos v0.5.3
[INFO] [stderr]   Downloaded bech32 v0.9.1
[INFO] [stderr]   Downloaded coins-core v0.8.7
[INFO] [stderr]   Downloaded coins-bip32 v0.8.7
[INFO] [stderr]   Downloaded scrypt v0.10.0
[INFO] [stderr]   Downloaded eth-keystore v0.5.0
[INFO] [stderr]   Downloaded libz-sys v1.1.20
[INFO] [stderr]   Downloaded camino v1.1.9
[INFO] [stderr]   Downloaded cargo_metadata v0.18.1
[INFO] [stderr]   Downloaded unarray v0.1.4
[INFO] [stderr]   Downloaded ethabi v18.0.0
[INFO] [stderr]   Downloaded hashers v1.0.1
[INFO] [stderr]   Downloaded rfc6979 v0.4.0
[INFO] [stderr]   Downloaded group v0.13.0
[INFO] [stderr]   Downloaded base16ct v0.2.0
[INFO] [stderr]   Downloaded sec1 v0.7.3
[INFO] [stderr]   Downloaded fixed-hash v0.8.0
[INFO] [stderr]   Downloaded impl-trait-for-tuples v0.2.2
[INFO] [stderr]   Downloaded parity-scale-codec-derive v3.6.12
[INFO] [stderr]   Downloaded scale-info-derive v2.11.3
[INFO] [stderr]   Downloaded rlp v0.5.2
[INFO] [stderr]   Downloaded path-slash v0.2.1
[INFO] [stderr]   Downloaded ascii-canvas v3.0.0
[INFO] [stderr]   Downloaded lalrpop-util v0.20.2
[INFO] [stderr]   Downloaded password-hash v0.4.2
[INFO] [stderr]   Downloaded zip v0.6.6
[INFO] [stderr]   Downloaded io-enum v1.1.3
[INFO] [stderr]   Downloaded cmake v0.1.51
[INFO] [stderr]   Downloaded mysql-common-derive v0.31.1
[INFO] [stderr]   Downloaded rkyv_derive v0.7.45
[INFO] [stderr]   Downloaded named_pipe v0.4.1
[INFO] [stderr]   Downloaded ipnet v2.10.0
[INFO] [stderr]   Downloaded rustc-hash v2.0.0
[INFO] [stderr]   Downloaded ripemd v0.1.3
[INFO] [stderr]   Downloaded salsa20 v0.10.2
[INFO] [stderr]   Downloaded cargo-platform v0.1.8
[INFO] [stderr]   Downloaded const-hex v1.12.0
[INFO] [stderr]   Downloaded ff v0.13.0
[INFO] [stderr]   Downloaded ethbloom v0.13.0
[INFO] [stderr]   Downloaded impl-codec v0.6.0
[INFO] [stderr]   Downloaded primitive-types v0.12.2
[INFO] [stderr]   Downloaded byte-slice-cast v1.2.2
[INFO] [stderr]   Downloaded ethers v2.0.14
[INFO] [stderr]   Downloaded crossbeam v0.8.4
[INFO] [stderr]   Downloaded derive_utils v0.14.2
[INFO] [stderr]   Downloaded frunk_derives v0.4.3
[INFO] [stderr]   Downloaded frunk_proc_macros v0.1.3
[INFO] [stderr]   Downloaded saturating v0.1.0
[INFO] [stderr]   Downloaded quinn-udp v0.5.5
[INFO] [stderr]   Downloaded quinn v0.11.5
[INFO] [stderr]   Downloaded rustc-hex v2.1.0
[INFO] [stderr]   Downloaded ena v0.14.3
[INFO] [stderr]   Downloaded eyre v0.6.12
[INFO] [stderr]   Downloaded hex-literal v0.4.1
[INFO] [stderr]   Downloaded lru v0.12.4
[INFO] [stderr]   Downloaded btoi v0.4.3
[INFO] [stderr]   Downloaded frunk_proc_macro_helpers v0.1.3
[INFO] [stderr]   Downloaded prettyplease v0.2.22
[INFO] [stderr]   Downloaded ethers-contract v2.0.14
[INFO] [stderr]   Downloaded ethers-middleware v2.0.14
[INFO] [stderr]   Downloaded enr v0.10.0
[INFO] [stderr]   Downloaded dsl_auto_type v0.1.2
[INFO] [stderr]   Downloaded scale-info v2.11.3
[INFO] [stderr]   Downloaded uint v0.9.5
[INFO] [stderr]   Downloaded open-fastrlp-derive v0.1.1
[INFO] [stderr]   Downloaded rlp-derive v0.1.0
[INFO] [stderr]   Downloaded futures-locks v0.7.1
[INFO] [stderr]   Downloaded ethereum-types v0.14.1
[INFO] [stderr]   Downloaded open-fastrlp v0.1.4
[INFO] [stderr]   Downloaded tungstenite v0.23.0
[INFO] [stderr]   Downloaded cc v1.1.22
[INFO] [stderr]   Downloaded schannel v0.1.24
[INFO] [stderr]   Downloaded rustls-native-certs v0.8.0
[INFO] [stderr]   Downloaded redox_syscall v0.5.6
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:c80049f3b88b82089a44e0f06d0d6029d44b96b7257e55a1cd63dbc9f4c33334" "/opt/rustwide/cargo-home/bin/cargo" "+5a45ab9738330fb317d49e3594c2db5248b1e971" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] cbde552781796869c1a89718f0c380dd77d9fd461f6960efd72027772ef23c46
[INFO] running `Command { std: "docker" "start" "-a" "cbde552781796869c1a89718f0c380dd77d9fd461f6960efd72027772ef23c46", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "cbde552781796869c1a89718f0c380dd77d9fd461f6960efd72027772ef23c46", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "cbde552781796869c1a89718f0c380dd77d9fd461f6960efd72027772ef23c46", kill_on_drop: false }`
[INFO] [stdout] cbde552781796869c1a89718f0c380dd77d9fd461f6960efd72027772ef23c46
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:c80049f3b88b82089a44e0f06d0d6029d44b96b7257e55a1cd63dbc9f4c33334" "/opt/rustwide/cargo-home/bin/cargo" "+5a45ab9738330fb317d49e3594c2db5248b1e971" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 23ed5eeb3375ae2d4d3e94754ff5ae1b34397c19ac60134223fec0930d418560
[INFO] running `Command { std: "docker" "start" "-a" "23ed5eeb3375ae2d4d3e94754ff5ae1b34397c19ac60134223fec0930d418560", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.86
[INFO] [stderr]    Compiling unicode-ident v1.0.13
[INFO] [stderr]    Compiling libc v0.2.159
[INFO] [stderr]    Compiling serde v1.0.210
[INFO] [stderr]    Compiling autocfg v1.4.0
[INFO] [stderr]    Compiling shlex v1.3.0
[INFO] [stderr]     Checking zeroize v1.8.1
[INFO] [stderr]     Checking byteorder v1.5.0
[INFO] [stderr]     Checking subtle v2.6.1
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]     Checking const-oid v0.9.6
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]     Checking memchr v2.7.4
[INFO] [stderr]    Compiling indexmap v2.5.0
[INFO] [stderr]    Compiling winnow v0.6.20
[INFO] [stderr]    Compiling thiserror v1.0.64
[INFO] [stderr]     Checking cpufeatures v0.2.14
[INFO] [stderr]     Checking futures-core v0.3.31
[INFO] [stderr]     Checking futures-sink v0.3.31
[INFO] [stderr]    Compiling crunchy v0.2.2
[INFO] [stderr]     Checking smallvec v1.13.2
[INFO] [stderr]    Compiling pkg-config v0.3.31
[INFO] [stderr]    Compiling ahash v0.8.11
[INFO] [stderr]     Checking futures-io v0.3.31
[INFO] [stderr]     Checking futures-channel v0.3.31
[INFO] [stderr]     Checking futures-task v0.3.31
[INFO] [stderr]    Compiling tiny-keccak v2.0.2
[INFO] [stderr]     Checking arrayvec v0.7.6
[INFO] [stderr]     Checking bitflags v2.6.0
[INFO] [stderr]    Compiling quote v1.0.37
[INFO] [stderr]    Compiling serde_json v1.0.128
[INFO] [stderr]     Checking der v0.7.9
[INFO] [stderr]     Checking rustc-hex v2.1.0
[INFO] [stderr]    Compiling syn v2.0.79
[INFO] [stderr]    Compiling lock_api v0.4.12
[INFO] [stderr]    Compiling slab v0.4.9
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking aho-corasick v1.1.3
[INFO] [stderr]     Checking byte-slice-cast v1.2.2
[INFO] [stderr]     Checking crypto-common v0.1.6
[INFO] [stderr]     Checking block-buffer v0.10.4
[INFO] [stderr]    Compiling semver v1.0.23
[INFO] [stderr]    Compiling camino v1.1.9
[INFO] [stderr]    Compiling rustix v0.38.37
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking base16ct v0.2.0
[INFO] [stderr]     Checking getrandom v0.2.15
[INFO] [stderr]     Checking parking_lot_core v0.9.10
[INFO] [stderr]     Checking socket2 v0.5.7
[INFO] [stderr]     Checking signal-hook-registry v1.4.2
[INFO] [stderr]     Checking mio v1.0.2
[INFO] [stderr]     Checking sha2 v0.10.8
[INFO] [stderr]     Checking hmac v0.12.1
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking sha3 v0.10.8
[INFO] [stderr]     Checking parking_lot v0.12.3
[INFO] [stderr]    Compiling jobserver v0.1.32
[INFO] [stderr]    Compiling regex-syntax v0.8.4
[INFO] [stderr]     Checking rfc6979 v0.4.0
[INFO] [stderr]     Checking ff v0.13.0
[INFO] [stderr]     Checking crypto-bigint v0.5.5
[INFO] [stderr]     Checking signature v2.2.0
[INFO] [stderr]    Compiling cc v1.1.22
[INFO] [stderr]     Checking unicode-normalization v0.1.24
[INFO] [stderr]     Checking group v0.13.0
[INFO] [stderr]     Checking spki v0.7.3
[INFO] [stderr]     Checking sec1 v0.7.3
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]     Checking uint v0.9.5
[INFO] [stderr]     Checking pkcs8 v0.10.2
[INFO] [stderr]    Compiling static_assertions v1.1.0
[INFO] [stderr]    Compiling wasm-bindgen-shared v0.2.93
[INFO] [stderr]     Checking tower-service v0.3.3
[INFO] [stderr]    Compiling rustls v0.21.12
[INFO] [stderr]     Checking idna v0.5.0
[INFO] [stderr]    Compiling hex v0.4.3
[INFO] [stderr]     Checking rustls-pki-types v1.9.0
[INFO] [stderr]     Checking regex-automata v0.4.7
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking iana-time-zone v0.1.61
[INFO] [stderr]     Checking fastrand v2.1.1
[INFO] [stderr]     Checking chrono v0.4.38
[INFO] [stderr]     Checking url v2.5.2
[INFO] [stderr]     Checking num-bigint v0.4.6
[INFO] [stderr]     Checking inout v0.1.3
[INFO] [stderr]     Checking const-hex v1.12.0
[INFO] [stderr]    Compiling wasm-bindgen v0.2.93
[INFO] [stderr]    Compiling prettyplease v0.2.22
[INFO] [stderr]    Compiling either v1.13.0
[INFO] [stderr]    Compiling glob v0.3.1
[INFO] [stderr]    Compiling ryu v1.0.18
[INFO] [stderr]     Checking elliptic-curve v0.13.8
[INFO] [stderr]     Checking unicode-xid v0.2.6
[INFO] [stderr]    Compiling radium v0.7.0
[INFO] [stderr]    Compiling eyre v0.6.12
[INFO] [stderr]     Checking cipher v0.4.4
[INFO] [stderr]    Compiling clang-sys v1.8.1
[INFO] [stderr]    Compiling rustls v0.23.13
[INFO] [stderr]     Checking ipnet v2.10.0
[INFO] [stderr]    Compiling crossbeam-utils v0.8.20
[INFO] [stderr]     Checking ecdsa v0.16.9
[INFO] [stderr]     Checking tap v1.0.1
[INFO] [stderr]    Compiling ring v0.17.8
[INFO] [stderr]    Compiling openssl-sys v0.9.103
[INFO] [stderr]    Compiling keccak v0.1.5
[INFO] [stderr]    Compiling linux-raw-sys v0.4.14
[INFO] [stderr]     Checking wyz v0.5.1
[INFO] [stderr]    Compiling ring v0.16.20
[INFO] [stderr]    Compiling zstd-sys v2.0.13+zstd.1.5.6
[INFO] [stderr]     Checking tempfile v3.12.0
[INFO] [stderr]     Checking k256 v0.13.4
[INFO] [stderr]    Compiling openssl v0.10.66
[INFO] [stderr]     Checking regex v1.10.6
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]     Checking funty v2.0.0
[INFO] [stderr]    Compiling native-tls v0.2.12
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]     Checking bitvec v1.0.1
[INFO] [stderr]     Checking bs58 v0.5.1
[INFO] [stderr]     Checking ripemd v0.1.3
[INFO] [stderr]    Compiling libloading v0.8.5
[INFO] [stderr]    Compiling indenter v0.3.3
[INFO] [stderr]     Checking bech32 v0.9.1
[INFO] [stderr]    Compiling frunk_core v0.4.3
[INFO] [stderr]    Compiling bindgen v0.70.1
[INFO] [stderr]    Compiling wasm-bindgen-backend v0.2.93
[INFO] [stderr]    Compiling darling_core v0.20.10
[INFO] [stderr]    Compiling wasm-bindgen-macro-support v0.2.93
[INFO] [stderr]    Compiling cexpr v0.6.0
[INFO] [stderr]    Compiling Inflector v0.11.4
[INFO] [stderr]    Compiling libz-sys v1.1.20
[INFO] [stderr]     Checking salsa20 v0.10.2
[INFO] [stderr]    Compiling itertools v0.11.0
[INFO] [stderr]     Checking pbkdf2 v0.11.0
[INFO] [stderr]     Checking fxhash v0.2.1
[INFO] [stderr]    Compiling dunce v1.0.5
[INFO] [stderr]     Checking send_wrapper v0.4.0
[INFO] [stderr]    Compiling frunk_proc_macro_helpers v0.1.3
[INFO] [stderr]    Compiling rustc-hash v1.1.0
[INFO] [stderr]    Compiling libm v0.2.8
[INFO] [stderr]    Compiling zstd-safe v7.2.1
[INFO] [stderr]     Checking scrypt v0.10.0
[INFO] [stderr]     Checking rustls-webpki v0.101.7
[INFO] [stderr]     Checking sct v0.7.1
[INFO] [stderr]     Checking rustls-webpki v0.102.8
[INFO] [stderr]     Checking hashers v1.0.1
[INFO] [stderr]    Compiling proc-macro-error-attr v1.0.4
[INFO] [stderr]     Checking rustls-pemfile v2.1.3
[INFO] [stderr]     Checking ctr v0.9.2
[INFO] [stderr]     Checking aes v0.8.4
[INFO] [stderr]    Compiling serde_derive v1.0.210
[INFO] [stderr]    Compiling zerocopy-derive v0.7.35
[INFO] [stderr]    Compiling thiserror-impl v1.0.64
[INFO] [stderr]    Compiling tokio-macros v2.4.0
[INFO] [stderr]    Compiling derive_more v0.99.18
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling tracing-attributes v0.1.27
[INFO] [stderr]    Compiling auto_impl v1.2.0
[INFO] [stderr]    Compiling impl-trait-for-tuples v0.2.2
[INFO] [stderr]    Compiling rlp-derive v0.1.0
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling wasm-bindgen-macro v0.2.93
[INFO] [stderr]    Compiling darling_macro v0.20.10
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling darling v0.20.10
[INFO] [stderr]     Checking zerocopy v0.7.35
[INFO] [stderr]    Compiling pin-project-internal v1.1.5
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]     Checking simple_asn1 v0.6.2
[INFO] [stderr]    Compiling async-trait v0.1.83
[INFO] [stderr]     Checking tracing v0.1.40
[INFO] [stderr]     Checking js-sys v0.3.70
[INFO] [stderr]     Checking ppv-lite86 v0.2.20
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking hashbrown v0.14.5
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking pin-project v1.1.5
[INFO] [stderr]     Checking strum v0.26.3
[INFO] [stderr]     Checking tracing-futures v0.2.5
[INFO] [stderr]    Compiling cmake v0.1.51
[INFO] [stderr]     Checking pbkdf2 v0.12.2
[INFO] [stderr]    Compiling subprocess v0.2.9
[INFO] [stderr]    Compiling bigdecimal v0.4.5
[INFO] [stderr]    Compiling rust_decimal v1.36.0
[INFO] [stderr]    Compiling proc-macro-error v1.0.4
[INFO] [stderr]     Checking fixed-hash v0.8.0
[INFO] [stderr]    Compiling frunk_proc_macros v0.1.3
[INFO] [stderr]    Compiling frunk_derives v0.4.3
[INFO] [stderr]     Checking crossbeam-epoch v0.9.18
[INFO] [stderr]     Checking webpki-roots v0.26.6
[INFO] [stderr]    Compiling mysqlclient-sys v0.4.1
[INFO] [stderr]    Compiling termcolor v1.4.1
[INFO] [stderr]     Checking crossbeam-deque v0.8.5
[INFO] [stderr]     Checking flate2 v1.0.34
[INFO] [stderr]    Compiling dsl_auto_type v0.1.2
[INFO] [stderr]    Compiling diesel_table_macro_syntax v0.2.0
[INFO] [stderr]    Compiling derive_utils v0.14.2
[INFO] [stderr]     Checking crossbeam-queue v0.3.11
[INFO] [stderr]     Checking crossbeam-channel v0.5.13
[INFO] [stderr]     Checking btoi v0.4.3
[INFO] [stderr]     Checking futures-locks v0.7.1
[INFO] [stderr]     Checking sync_wrapper v1.0.1
[INFO] [stderr]    Compiling mysql v25.0.1
[INFO] [stderr]     Checking saturating v0.1.0
[INFO] [stderr]     Checking uuid v1.10.0
[INFO] [stderr]     Checking anstream v0.6.15
[INFO] [stderr]    Compiling io-enum v1.1.3
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking lru v0.12.4
[INFO] [stderr]     Checking twox-hash v1.6.3
[INFO] [stderr]     Checking rustls-native-certs v0.8.0
[INFO] [stderr]     Checking env_filter v0.1.2
[INFO] [stderr]     Checking pem v3.0.4
[INFO] [stderr]     Checking bufstream v0.1.4
[INFO] [stderr]    Compiling diesel_derives v2.2.3
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking crossbeam v0.8.4
[INFO] [stderr]     Checking env_logger v0.11.5
[INFO] [stderr]     Checking hex-literal v0.4.1
[INFO] [stderr]     Checking dotenv v0.15.0
[INFO] [stderr]     Checking gloo-timers v0.2.6
[INFO] [stderr]     Checking frunk v0.4.3
[INFO] [stderr]     Checking futures-timer v3.0.3
[INFO] [stderr]     Checking zstd v0.13.2
[INFO] [stderr]     Checking bytes v1.7.2
[INFO] [stderr]     Checking impl-serde v0.4.0
[INFO] [stderr]     Checking cargo-platform v0.1.8
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking toml_datetime v0.6.8
[INFO] [stderr]     Checking serde_spanned v0.6.8
[INFO] [stderr]     Checking coins-core v0.8.7
[INFO] [stderr]     Checking uuid v0.8.2
[INFO] [stderr]     Checking toml_edit v0.22.22
[INFO] [stderr]     Checking coins-bip32 v0.8.7
[INFO] [stderr]     Checking tokio v1.40.0
[INFO] [stderr]     Checking rlp v0.5.2
[INFO] [stderr]     Checking http v1.1.0
[INFO] [stderr]     Checking http v0.2.12
[INFO] [stderr]    Compiling mysql_common v0.32.4
[INFO] [stderr]     Checking impl-rlp v0.3.0
[INFO] [stderr]     Checking enr v0.10.0
[INFO] [stderr]     Checking cargo_metadata v0.18.1
[INFO] [stderr]     Checking jsonwebtoken v8.3.0
[INFO] [stderr]     Checking eth-keystore v0.5.0
[INFO] [stderr]     Checking coins-bip39 v0.8.7
[INFO] [stderr]    Compiling open-fastrlp-derive v0.1.1
[INFO] [stderr]     Checking http-body v0.4.6
[INFO] [stderr]     Checking tungstenite v0.20.1
[INFO] [stderr]     Checking http-body v1.0.1
[INFO] [stderr]     Checking tungstenite v0.23.0
[INFO] [stderr]     Checking tungstenite v0.24.0
[INFO] [stderr]     Checking http-body-util v0.1.2
[INFO] [stderr]     Checking toml v0.8.19
[INFO] [stderr]     Checking async-tungstenite v0.27.0
[INFO] [stderr]     Checking diesel v2.2.4
[INFO] [stderr]    Compiling proc-macro-crate v3.2.0
[INFO] [stderr]    Compiling parity-scale-codec-derive v3.6.12
[INFO] [stderr]    Compiling scale-info-derive v2.11.3
[INFO] [stderr]    Compiling num_enum_derive v0.7.3
[INFO] [stderr]    Compiling mysql-common-derive v0.31.1
[INFO] [stderr]     Checking num_enum v0.7.3
[INFO] [stderr]     Checking parity-scale-codec v3.6.12
[INFO] [stderr]     Checking tokio-util v0.7.12
[INFO] [stderr]     Checking tokio-rustls v0.24.1
[INFO] [stderr]     Checking tokio-rustls v0.26.0
[INFO] [stderr]     Checking tokio-native-tls v0.3.1
[INFO] [stderr]     Checking tokio-socks v0.5.2
[INFO] [stderr]     Checking impl-codec v0.6.0
[INFO] [stderr]     Checking scale-info v2.11.3
[INFO] [stderr]     Checking tokio-tungstenite v0.24.0
[INFO] [stderr]     Checking tokio-tungstenite v0.20.1
[INFO] [stderr]     Checking h2 v0.3.26
[INFO] [stderr]     Checking h2 v0.4.6
[INFO] [stderr]     Checking primitive-types v0.12.2
[INFO] [stderr]     Checking ethbloom v0.13.0
[INFO] [stderr]     Checking ethereum-types v0.14.1
[INFO] [stderr]     Checking ethabi v18.0.0
[INFO] [stderr]     Checking open-fastrlp v0.1.4
[INFO] [stderr]     Checking ethers-core v2.0.14
[INFO] [stderr]     Checking hyper v0.14.30
[INFO] [stderr]     Checking hyper v1.4.1
[INFO] [stderr]     Checking hyper-util v0.1.9
[INFO] [stderr]     Checking hyper-rustls v0.24.2
[INFO] [stderr]     Checking hyper-tls v0.6.0
[INFO] [stderr]     Checking hyper-rustls v0.27.3
[INFO] [stderr]     Checking reqwest v0.11.27
[INFO] [stderr]     Checking reqwest v0.12.8
[INFO] [stderr]     Checking reqwest-websocket v0.4.2
[INFO] [stderr]     Checking ethers-providers v2.0.14
[INFO] [stderr]     Checking ethers-contract-abigen v2.0.14
[INFO] [stderr]     Checking ethers-signers v2.0.14
[INFO] [stderr]     Checking ethers-etherscan v2.0.14
[INFO] [stderr]     Checking ethers-addressbook v2.0.14
[INFO] [stderr]    Compiling ethers-contract-derive v2.0.14
[INFO] [stderr]     Checking ethers-contract v2.0.14
[INFO] [stderr]     Checking ethers-middleware v2.0.14
[INFO] [stderr]     Checking ethers v2.0.14
[INFO] [stderr]     Checking crypto_prices v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `json`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:3:18
[INFO] [stdout]   |
[INFO] [stdout] 3 | use serde_json::{json, Value};
[INFO] [stdout]   |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::pin::Pin`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::pin::Pin;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/aggregatedPrice/coingecko.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> src/aggregatedPrice/bybit.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::pin::Pin`
[INFO] [stdout]  --> src/aggregatedPrice/bybit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::pin::Pin;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Proxy`
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:10:23
[INFO] [stdout]    |
[INFO] [stdout] 10 | use reqwest::{Client, Proxy};
[INFO] [stdout]    |                       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sleep`
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:14:19
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::time::{sleep, Duration};
[INFO] [stdout]    |                   ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> src/aggregatedPrice/kraken.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::aggregatedPrice::cryptopair::CryptoPair`
[INFO] [stdout]  --> src/aggregatedPrice/pricedata.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::aggregatedPrice::cryptopair::CryptoPair;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::future::Future`
[INFO] [stdout]  --> src/aggregatedPrice/Exchange.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::future::Future;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::aggregatedPrice::cryptopair::CryptoPair`
[INFO] [stdout]  --> src/aggregatedPrice/Exchange.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::aggregatedPrice::cryptopair::CryptoPair;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/database_mod.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::env`
[INFO] [stdout]  --> src/database_mod.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::env;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/database_mod.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `dotenv::dotenv`
[INFO] [stdout]  --> src/database_mod.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use dotenv::dotenv;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `params`
[INFO] [stdout]  --> src/database_mod.rs:5:13
[INFO] [stdout]   |
[INFO] [stdout] 5 | use mysql::{params, Pool, PooledConn};
[INFO] [stdout]   |             ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `mysql::prelude::Queryable`
[INFO] [stdout]  --> src/database_mod.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use mysql::prelude::Queryable;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `json`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:3:18
[INFO] [stdout]   |
[INFO] [stdout] 3 | use serde_json::{json, Value};
[INFO] [stdout]   |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::pin::Pin`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::pin::Pin;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/aggregatedPrice/coingecko.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> src/aggregatedPrice/bybit.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::pin::Pin`
[INFO] [stdout]  --> src/aggregatedPrice/bybit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::pin::Pin;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Proxy`
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:10:23
[INFO] [stdout]    |
[INFO] [stdout] 10 | use reqwest::{Client, Proxy};
[INFO] [stdout]    |                       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sleep`
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:14:19
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::time::{sleep, Duration};
[INFO] [stdout]    |                   ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> src/aggregatedPrice/kraken.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::aggregatedPrice::cryptopair::CryptoPair`
[INFO] [stdout]  --> src/aggregatedPrice/pricedata.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::aggregatedPrice::cryptopair::CryptoPair;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::future::Future`
[INFO] [stdout]  --> src/aggregatedPrice/Exchange.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::future::Future;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::aggregatedPrice::cryptopair::CryptoPair`
[INFO] [stdout]  --> src/aggregatedPrice/Exchange.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::aggregatedPrice::cryptopair::CryptoPair;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/database_mod.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::env`
[INFO] [stdout]  --> src/database_mod.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::env;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/database_mod.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `dotenv::dotenv`
[INFO] [stdout]  --> src/database_mod.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use dotenv::dotenv;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx`
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:21:36
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub async fn fetch_coingecko_price(tx: mpsc::Sender<f64>, pair: CryptoPair) {
[INFO] [stdout]    |                                    ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:24:13
[INFO] [stdout]    |
[INFO] [stdout] 24 |         let mut token1 = pair.token1.clone();
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |         let mut token2 = pair.token2.clone();
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx`
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:21:36
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub async fn fetch_coingecko_price(tx: mpsc::Sender<f64>, pair: CryptoPair) {
[INFO] [stdout]    |                                    ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:24:13
[INFO] [stdout]    |
[INFO] [stdout] 24 |         let mut token1 = pair.token1.clone();
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |         let mut token2 = pair.token2.clone();
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 |     let mut inst_id = format!("{}-{}", pair.token1, pair.token2);
[INFO] [stdout]    |         ----^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 |     let mut inst_id = format!("{}-{}", pair.token1, pair.token2);
[INFO] [stdout]    |         ----^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pending_tx`
[INFO] [stdout]   --> src/transaction/sendtx.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let pending_tx = client.send_transaction(tx, None).await?;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pending_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pending_tx`
[INFO] [stdout]   --> src/transaction/sendtx.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let pending_tx = client.send_transaction(tx, None).await?;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pending_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `send_status` is never read
[INFO] [stdout]   --> src/cryptoPrice/merge.rs:34:21
[INFO] [stdout]    |
[INFO] [stdout] 34 |                     send_status = "succeed";
[INFO] [stdout]    |                     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout]    = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `send_status` is never read
[INFO] [stdout]   --> src/cryptoPrice/merge.rs:38:21
[INFO] [stdout]    |
[INFO] [stdout] 38 |                     send_status = "failed";
[INFO] [stdout]    |                     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `send_status` is never read
[INFO] [stdout]   --> src/cryptoPrice/merge.rs:34:21
[INFO] [stdout]    |
[INFO] [stdout] 34 |                     send_status = "succeed";
[INFO] [stdout]    |                     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout]    = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `send_status` is never read
[INFO] [stdout]   --> src/cryptoPrice/merge.rs:38:21
[INFO] [stdout]    |
[INFO] [stdout] 38 |                     send_status = "failed";
[INFO] [stdout]    |                     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:1:20
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/binance.rs:143:13
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let mut websocket = response.into_websocket().await?;
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:1:20
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/binance.rs:143:13
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let mut websocket = response.into_websocket().await?;
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/bybit.rs:150:13
[INFO] [stdout]     |
[INFO] [stdout] 150 |         let mut websocket = response.into_websocket().await?;
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/bybit.rs:150:13
[INFO] [stdout]     |
[INFO] [stdout] 150 |         let mut websocket = response.into_websocket().await?;
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `proxy_url`
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:133:16
[INFO] [stdout]     |
[INFO] [stdout] 133 |     pub fn new(proxy_url: &str, name: String, id: u8, pair: CryptoPair, ) -> Result<Self, Box<dyn Error>> {
[INFO] [stdout]     |                ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_proxy_url`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:143:14
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let (mut socket, _) = connect_async(wss_url).await.expect("Failed to connect");
[INFO] [stdout]     |              ----^^^^^^
[INFO] [stdout]     |              |
[INFO] [stdout]     |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:145:13
[INFO] [stdout]     |
[INFO] [stdout] 145 |         let mut inst_id = format!("{}-{}", self.pair.token1, self.pair.token2);
[INFO] [stdout]     |             ----^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `proxy_url`
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:133:16
[INFO] [stdout]     |
[INFO] [stdout] 133 |     pub fn new(proxy_url: &str, name: String, id: u8, pair: CryptoPair, ) -> Result<Self, Box<dyn Error>> {
[INFO] [stdout]     |                ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_proxy_url`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:143:14
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let (mut socket, _) = connect_async(wss_url).await.expect("Failed to connect");
[INFO] [stdout]     |              ----^^^^^^
[INFO] [stdout]     |              |
[INFO] [stdout]     |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:145:13
[INFO] [stdout]     |
[INFO] [stdout] 145 |         let mut inst_id = format!("{}-{}", self.pair.token1, self.pair.token2);
[INFO] [stdout]     |             ----^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `price_tx`
[INFO] [stdout]   --> src/transaction/sendtx.rs:88:10
[INFO] [stdout]    |
[INFO] [stdout] 88 |     let (price_tx, mut price_rx) = mpsc::channel::<f64>(32); // 用于接收聚合后的价格
[INFO] [stdout]    |          ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_price_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/transaction/sendtx.rs:88:20
[INFO] [stdout]    |
[INFO] [stdout] 88 |     let (price_tx, mut price_rx) = mpsc::channel::<f64>(32); // 用于接收聚合后的价格
[INFO] [stdout]    |                    ----^^^^^^^^
[INFO] [stdout]    |                    |
[INFO] [stdout]    |                    help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: module `aggregatedPrice` should have a snake case name
[INFO] [stdout]  --> src/lib.rs:2:9
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub mod aggregatedPrice;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `aggregated_price`
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: module `cryptoPrice` should have a snake case name
[INFO] [stdout]  --> src/lib.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub mod cryptoPrice;
[INFO] [stdout]   |         ^^^^^^^^^^^ help: convert the identifier to snake case: `crypto_price`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: module `Exchange` should have a snake case name
[INFO] [stdout]  --> src/aggregatedPrice/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub mod Exchange;
[INFO] [stdout]   |         ^^^^^^^^ help: convert the identifier to snake case: `exchange`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: module `aggregatedPrice` should have a snake case name
[INFO] [stdout]  --> src/lib.rs:2:9
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub mod aggregatedPrice;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `aggregated_price`
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: module `cryptoPrice` should have a snake case name
[INFO] [stdout]  --> src/lib.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub mod cryptoPrice;
[INFO] [stdout]   |         ^^^^^^^^^^^ help: convert the identifier to snake case: `crypto_price`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: module `Exchange` should have a snake case name
[INFO] [stdout]  --> src/aggregatedPrice/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub mod Exchange;
[INFO] [stdout]   |         ^^^^^^^^ help: convert the identifier to snake case: `exchange`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/aggregatedPrice/bybit.rs:254:5
[INFO] [stdout]     |
[INFO] [stdout] 254 |     test_fetch_price(price_tx).await;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 254 |     let _ = test_fetch_price(price_tx).await;
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `test_sendTx` should have a snake case name
[INFO] [stdout]   --> src/transaction/sendtx.rs:74:14
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub async fn test_sendTx() {
[INFO] [stdout]    |              ^^^^^^^^^^^ help: convert the identifier to snake case: `test_send_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `test_addInfo` should have a snake case name
[INFO] [stdout]   --> src/database_mod.rs:18:8
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub fn test_addInfo() {
[INFO] [stdout]    |        ^^^^^^^^^^^^ help: convert the identifier to snake case: `test_add_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::StreamExt`
[INFO] [stdout]  --> src/main.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures::StreamExt;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Http`, `LocalWallet`, `Middleware`, `Provider`, and `Signer`
[INFO] [stdout]  --> src/main.rs:4:17
[INFO] [stdout]   |
[INFO] [stdout] 4 |     providers::{Http, Middleware, Provider},
[INFO] [stdout]   |                 ^^^^  ^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 5 |     signers::{LocalWallet, Signer},
[INFO] [stdout]   |               ^^^^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::convert::TryFrom`
[INFO] [stdout]  --> src/main.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::convert::TryFrom;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::str::FromStr`
[INFO] [stdout]   --> src/main.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use std::str::FromStr;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `json`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:3:18
[INFO] [stdout]   |
[INFO] [stdout] 3 | use serde_json::{json, Value};
[INFO] [stdout]   |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::pin::Pin`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::pin::Pin;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/aggregatedPrice/coingecko.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> src/aggregatedPrice/bybit.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::pin::Pin`
[INFO] [stdout]  --> src/aggregatedPrice/bybit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::pin::Pin;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Proxy`
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:10:23
[INFO] [stdout]    |
[INFO] [stdout] 10 | use reqwest::{Client, Proxy};
[INFO] [stdout]    |                       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sleep`
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:14:19
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::time::{sleep, Duration};
[INFO] [stdout]    |                   ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> src/aggregatedPrice/kraken.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::aggregatedPrice::cryptopair::CryptoPair`
[INFO] [stdout]  --> src/aggregatedPrice/pricedata.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::aggregatedPrice::cryptopair::CryptoPair;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::future::Future`
[INFO] [stdout]  --> src/aggregatedPrice/Exchange.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::future::Future;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::aggregatedPrice::cryptopair::CryptoPair`
[INFO] [stdout]  --> src/aggregatedPrice/Exchange.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::aggregatedPrice::cryptopair::CryptoPair;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `PooledConn` and `params`
[INFO] [stdout]   --> src/main.rs:21:13
[INFO] [stdout]    |
[INFO] [stdout] 21 | use mysql::{params, Opts, Pool, PooledConn};
[INFO] [stdout]    |             ^^^^^^              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `mysql::prelude::Queryable`
[INFO] [stdout]   --> src/main.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use mysql::prelude::Queryable;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/main.rs:45:9
[INFO] [stdout]    |
[INFO] [stdout] 45 |         /// 这个通道的tx是merge函数，rx是发送交易的函数
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 46 |         let (price_tx, mut price_rx) = mpsc::channel::<f64>(32); // 用于接收聚合后的价格
[INFO] [stdout]    |         -------------------------------------------------------- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout]    = note: `#[warn(unused_doc_comments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/main.rs:48:9
[INFO] [stdout]    |
[INFO] [stdout] 48 |         /// 这个通道的tx是多个fetch_price函数，rx是merge函数
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 49 |         let (merge_tx, merge_rx) = mpsc::channel::<PriceData>(32); // 用于传递原始价格
[INFO] [stdout]    |         ---------------------------------------------------------- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::StreamExt`
[INFO] [stdout]  --> src/main.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures::StreamExt;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Http`, `LocalWallet`, `Middleware`, `Provider`, and `Signer`
[INFO] [stdout]  --> src/main.rs:4:17
[INFO] [stdout]   |
[INFO] [stdout] 4 |     providers::{Http, Middleware, Provider},
[INFO] [stdout]   |                 ^^^^  ^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 5 |     signers::{LocalWallet, Signer},
[INFO] [stdout]   |               ^^^^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::convert::TryFrom`
[INFO] [stdout]  --> src/main.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::convert::TryFrom;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::str::FromStr`
[INFO] [stdout]   --> src/main.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use std::str::FromStr;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `json`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:3:18
[INFO] [stdout]   |
[INFO] [stdout] 3 | use serde_json::{json, Value};
[INFO] [stdout]   |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::pin::Pin`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::pin::Pin;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/aggregatedPrice/coingecko.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> src/aggregatedPrice/bybit.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::pin::Pin`
[INFO] [stdout]  --> src/aggregatedPrice/bybit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::pin::Pin;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Proxy`
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:10:23
[INFO] [stdout]    |
[INFO] [stdout] 10 | use reqwest::{Client, Proxy};
[INFO] [stdout]    |                       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sleep`
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:14:19
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::time::{sleep, Duration};
[INFO] [stdout]    |                   ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> src/aggregatedPrice/kraken.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::aggregatedPrice::cryptopair::CryptoPair`
[INFO] [stdout]  --> src/aggregatedPrice/pricedata.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::aggregatedPrice::cryptopair::CryptoPair;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::future::Future`
[INFO] [stdout]  --> src/aggregatedPrice/Exchange.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::future::Future;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::aggregatedPrice::cryptopair::CryptoPair`
[INFO] [stdout]  --> src/aggregatedPrice/Exchange.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::aggregatedPrice::cryptopair::CryptoPair;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `PooledConn` and `params`
[INFO] [stdout]   --> src/main.rs:21:13
[INFO] [stdout]    |
[INFO] [stdout] 21 | use mysql::{params, Opts, Pool, PooledConn};
[INFO] [stdout]    |             ^^^^^^              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `mysql::prelude::Queryable`
[INFO] [stdout]   --> src/main.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use mysql::prelude::Queryable;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/main.rs:45:9
[INFO] [stdout]    |
[INFO] [stdout] 45 |         /// 这个通道的tx是merge函数，rx是发送交易的函数
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 46 |         let (price_tx, mut price_rx) = mpsc::channel::<f64>(32); // 用于接收聚合后的价格
[INFO] [stdout]    |         -------------------------------------------------------- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout]    = note: `#[warn(unused_doc_comments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/main.rs:48:9
[INFO] [stdout]    |
[INFO] [stdout] 48 |         /// 这个通道的tx是多个fetch_price函数，rx是merge函数
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 49 |         let (merge_tx, merge_rx) = mpsc::channel::<PriceData>(32); // 用于传递原始价格
[INFO] [stdout]    |         ---------------------------------------------------------- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx`
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:21:36
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub async fn fetch_coingecko_price(tx: mpsc::Sender<f64>, pair: CryptoPair) {
[INFO] [stdout]    |                                    ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:24:13
[INFO] [stdout]    |
[INFO] [stdout] 24 |         let mut token1 = pair.token1.clone();
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |         let mut token2 = pair.token2.clone();
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx`
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:21:36
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub async fn fetch_coingecko_price(tx: mpsc::Sender<f64>, pair: CryptoPair) {
[INFO] [stdout]    |                                    ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:24:13
[INFO] [stdout]    |
[INFO] [stdout] 24 |         let mut token1 = pair.token1.clone();
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |         let mut token2 = pair.token2.clone();
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 |     let mut inst_id = format!("{}-{}", pair.token1, pair.token2);
[INFO] [stdout]    |         ----^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 |     let mut inst_id = format!("{}-{}", pair.token1, pair.token2);
[INFO] [stdout]    |         ----^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pending_tx`
[INFO] [stdout]   --> src/transaction/sendtx.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let pending_tx = client.send_transaction(tx, None).await?;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pending_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pending_tx`
[INFO] [stdout]   --> src/transaction/sendtx.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let pending_tx = client.send_transaction(tx, None).await?;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pending_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `send_status` is never read
[INFO] [stdout]   --> src/cryptoPrice/merge.rs:34:21
[INFO] [stdout]    |
[INFO] [stdout] 34 |                     send_status = "succeed";
[INFO] [stdout]    |                     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout]    = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `send_status` is never read
[INFO] [stdout]   --> src/cryptoPrice/merge.rs:38:21
[INFO] [stdout]    |
[INFO] [stdout] 38 |                     send_status = "failed";
[INFO] [stdout]    |                     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `send_status` is never read
[INFO] [stdout]   --> src/cryptoPrice/merge.rs:34:21
[INFO] [stdout]    |
[INFO] [stdout] 34 |                     send_status = "succeed";
[INFO] [stdout]    |                     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout]    = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `send_status` is never read
[INFO] [stdout]   --> src/cryptoPrice/merge.rs:38:21
[INFO] [stdout]    |
[INFO] [stdout] 38 |                     send_status = "failed";
[INFO] [stdout]    |                     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:1:20
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude`
[INFO] [stdout]  --> src/main.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     prelude::*
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/binance.rs:143:13
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let mut websocket = response.into_websocket().await?;
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/bybit.rs:150:13
[INFO] [stdout]     |
[INFO] [stdout] 150 |         let mut websocket = response.into_websocket().await?;
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> src/aggregatedPrice/binance.rs:1:20
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures_util::{SinkExt, StreamExt, TryStreamExt};
[INFO] [stdout]   |                    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude`
[INFO] [stdout]  --> src/main.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     prelude::*
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/binance.rs:143:13
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let mut websocket = response.into_websocket().await?;
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `proxy_url`
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:133:16
[INFO] [stdout]     |
[INFO] [stdout] 133 |     pub fn new(proxy_url: &str, name: String, id: u8, pair: CryptoPair, ) -> Result<Self, Box<dyn Error>> {
[INFO] [stdout]     |                ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_proxy_url`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:143:14
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let (mut socket, _) = connect_async(wss_url).await.expect("Failed to connect");
[INFO] [stdout]     |              ----^^^^^^
[INFO] [stdout]     |              |
[INFO] [stdout]     |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:145:13
[INFO] [stdout]     |
[INFO] [stdout] 145 |         let mut inst_id = format!("{}-{}", self.pair.token1, self.pair.token2);
[INFO] [stdout]     |             ----^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/bybit.rs:150:13
[INFO] [stdout]     |
[INFO] [stdout] 150 |         let mut websocket = response.into_websocket().await?;
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `proxy_url`
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:133:16
[INFO] [stdout]     |
[INFO] [stdout] 133 |     pub fn new(proxy_url: &str, name: String, id: u8, pair: CryptoPair, ) -> Result<Self, Box<dyn Error>> {
[INFO] [stdout]     |                ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_proxy_url`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `merge_tx_clone`
[INFO] [stdout]   --> src/main.rs:50:13
[INFO] [stdout]    |
[INFO] [stdout] 50 |         let merge_tx_clone = merge_tx.clone();
[INFO] [stdout]    |             ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_merge_tx_clone`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bybit_handle`
[INFO] [stdout]    --> src/main.rs:128:13
[INFO] [stdout]     |
[INFO] [stdout] 128 |         let bybit_handle = start_exchange_task::<BYBIT,_>(
[INFO] [stdout]     |             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bybit_handle`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:143:14
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let (mut socket, _) = connect_async(wss_url).await.expect("Failed to connect");
[INFO] [stdout]     |              ----^^^^^^
[INFO] [stdout]     |              |
[INFO] [stdout]     |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:145:13
[INFO] [stdout]     |
[INFO] [stdout] 145 |         let mut inst_id = format!("{}-{}", self.pair.token1, self.pair.token2);
[INFO] [stdout]     |             ----^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `NTHREADS` is never used
[INFO] [stdout]   --> src/main.rs:31:8
[INFO] [stdout]    |
[INFO] [stdout] 31 | static NTHREADS: i32 = 3;
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fetch_binance_price` is never used
[INFO] [stdout]   --> src/aggregatedPrice/binance.rs:17:14
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub async fn fetch_binance_price(tx: mpsc::Sender<PriceData>, pair: CryptoPair, conn :&mut PooledConn) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `id` are never read
[INFO] [stdout]    --> src/aggregatedPrice/binance.rs:117:9
[INFO] [stdout]     |
[INFO] [stdout] 116 | pub struct BINANCE{
[INFO] [stdout]     |            ------- fields in this struct
[INFO] [stdout] 117 |     pub name: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 118 |     pub id: u8,
[INFO] [stdout]     |         ^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `BINANCE` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fetch_coingecko_price` is never used
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:21:14
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub async fn fetch_coingecko_price(tx: mpsc::Sender<f64>, pair: CryptoPair) {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_price` is never used
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:38:10
[INFO] [stdout]    |
[INFO] [stdout] 38 | async fn get_price(token1: &str, token2:&str) -> Result<f64, reqwest::Error> {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fetch_bybit_price` is never used
[INFO] [stdout]   --> src/aggregatedPrice/bybit.rs:20:14
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub async fn fetch_bybit_price(tx: mpsc::Sender<PriceData>, pair: CryptoPair, conn: &mut PooledConn) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `id` are never read
[INFO] [stdout]    --> src/aggregatedPrice/bybit.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 114 | pub struct BYBIT {
[INFO] [stdout]     |            ----- fields in this struct
[INFO] [stdout] 115 |     pub name: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 116 |     pub id: u8,
[INFO] [stdout]     |         ^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `BYBIT` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `test_fetch_price` is never used
[INFO] [stdout]    --> src/aggregatedPrice/bybit.rs:261:14
[INFO] [stdout]     |
[INFO] [stdout] 261 | pub async fn test_fetch_price(price_tx: mpsc::Sender<PriceData>) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fetch_okx_mark_price` is never used
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:20:14
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub async fn fetch_okx_mark_price(tx: mpsc::Sender<PriceData>, pair: CryptoPair, conn :&mut PooledConn) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `id`, and `client` are never read
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:124:9
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub struct OKX{
[INFO] [stdout]     |            --- fields in this struct
[INFO] [stdout] 124 |     pub name: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 125 |     pub id: u8,
[INFO] [stdout]     |         ^^
[INFO] [stdout] 126 |     pub client: Option<Client>,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `OKX` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `test_fetch_price` is never used
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:267:14
[INFO] [stdout]     |
[INFO] [stdout] 267 | pub async fn test_fetch_price(price_tx: mpsc::Sender<PriceData>) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fetch_kraken_price` is never used
[INFO] [stdout]   --> src/aggregatedPrice/kraken.rs:13:14
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub async fn fetch_kraken_price(tx: mpsc::Sender<PriceData>, pair: CryptoPair, conn: &mut PooledConn) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_eth_usdc_pair` is never used
[INFO] [stdout]   --> src/aggregatedPrice/cryptopair.rs:85:8
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub fn get_eth_usdc_pair() ->  Vec<CryptoPair>{
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `send_tx` is never used
[INFO] [stdout]   --> src/transaction/sendtx.rs:17:14
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub async fn send_tx(mut price_rx:mpsc::Receiver<f64>, crypto_pair:&CryptoPair, decimal:u8) -> Result<(), Box<dyn std::error::Error>> {
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: module `aggregatedPrice` should have a snake case name
[INFO] [stdout]   --> src/main.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | mod aggregatedPrice; // 引入模块
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `aggregated_price`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: module `cryptoPrice` should have a snake case name
[INFO] [stdout]   --> src/main.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | mod cryptoPrice;
[INFO] [stdout]    |     ^^^^^^^^^^^ help: convert the identifier to snake case: `crypto_price`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: module `Exchange` should have a snake case name
[INFO] [stdout]  --> src/aggregatedPrice/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub mod Exchange;
[INFO] [stdout]   |         ^^^^^^^^ help: convert the identifier to snake case: `exchange`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `price_tx`
[INFO] [stdout]   --> src/transaction/sendtx.rs:88:10
[INFO] [stdout]    |
[INFO] [stdout] 88 |     let (price_tx, mut price_rx) = mpsc::channel::<f64>(32); // 用于接收聚合后的价格
[INFO] [stdout]    |          ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_price_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/transaction/sendtx.rs:88:20
[INFO] [stdout]    |
[INFO] [stdout] 88 |     let (price_tx, mut price_rx) = mpsc::channel::<f64>(32); // 用于接收聚合后的价格
[INFO] [stdout]    |                    ----^^^^^^^^
[INFO] [stdout]    |                    |
[INFO] [stdout]    |                    help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `merge_tx_clone`
[INFO] [stdout]   --> src/main.rs:50:13
[INFO] [stdout]    |
[INFO] [stdout] 50 |         let merge_tx_clone = merge_tx.clone();
[INFO] [stdout]    |             ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_merge_tx_clone`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bybit_handle`
[INFO] [stdout]    --> src/main.rs:128:13
[INFO] [stdout]     |
[INFO] [stdout] 128 |         let bybit_handle = start_exchange_task::<BYBIT,_>(
[INFO] [stdout]     |             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bybit_handle`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `NTHREADS` is never used
[INFO] [stdout]   --> src/main.rs:31:8
[INFO] [stdout]    |
[INFO] [stdout] 31 | static NTHREADS: i32 = 3;
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fetch_binance_price` is never used
[INFO] [stdout]   --> src/aggregatedPrice/binance.rs:17:14
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub async fn fetch_binance_price(tx: mpsc::Sender<PriceData>, pair: CryptoPair, conn :&mut PooledConn) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `id` are never read
[INFO] [stdout]    --> src/aggregatedPrice/binance.rs:117:9
[INFO] [stdout]     |
[INFO] [stdout] 116 | pub struct BINANCE{
[INFO] [stdout]     |            ------- fields in this struct
[INFO] [stdout] 117 |     pub name: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 118 |     pub id: u8,
[INFO] [stdout]     |         ^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `BINANCE` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fetch_coingecko_price` is never used
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:21:14
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub async fn fetch_coingecko_price(tx: mpsc::Sender<f64>, pair: CryptoPair) {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_price` is never used
[INFO] [stdout]   --> src/aggregatedPrice/coingecko.rs:38:10
[INFO] [stdout]    |
[INFO] [stdout] 38 | async fn get_price(token1: &str, token2:&str) -> Result<f64, reqwest::Error> {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fetch_bybit_price` is never used
[INFO] [stdout]   --> src/aggregatedPrice/bybit.rs:20:14
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub async fn fetch_bybit_price(tx: mpsc::Sender<PriceData>, pair: CryptoPair, conn: &mut PooledConn) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `id` are never read
[INFO] [stdout]    --> src/aggregatedPrice/bybit.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 114 | pub struct BYBIT {
[INFO] [stdout]     |            ----- fields in this struct
[INFO] [stdout] 115 |     pub name: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 116 |     pub id: u8,
[INFO] [stdout]     |         ^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `BYBIT` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fetch_okx_mark_price` is never used
[INFO] [stdout]   --> src/aggregatedPrice/okx.rs:20:14
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub async fn fetch_okx_mark_price(tx: mpsc::Sender<PriceData>, pair: CryptoPair, conn :&mut PooledConn) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `id`, and `client` are never read
[INFO] [stdout]    --> src/aggregatedPrice/okx.rs:124:9
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub struct OKX{
[INFO] [stdout]     |            --- fields in this struct
[INFO] [stdout] 124 |     pub name: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 125 |     pub id: u8,
[INFO] [stdout]     |         ^^
[INFO] [stdout] 126 |     pub client: Option<Client>,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `OKX` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fetch_kraken_price` is never used
[INFO] [stdout]   --> src/aggregatedPrice/kraken.rs:13:14
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub async fn fetch_kraken_price(tx: mpsc::Sender<PriceData>, pair: CryptoPair, conn: &mut PooledConn) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_eth_usdc_pair` is never used
[INFO] [stdout]   --> src/aggregatedPrice/cryptopair.rs:85:8
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub fn get_eth_usdc_pair() ->  Vec<CryptoPair>{
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: module `aggregatedPrice` should have a snake case name
[INFO] [stdout]   --> src/main.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | mod aggregatedPrice; // 引入模块
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `aggregated_price`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: module `cryptoPrice` should have a snake case name
[INFO] [stdout]   --> src/main.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | mod cryptoPrice;
[INFO] [stdout]    |     ^^^^^^^^^^^ help: convert the identifier to snake case: `crypto_price`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: module `Exchange` should have a snake case name
[INFO] [stdout]  --> src/aggregatedPrice/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub mod Exchange;
[INFO] [stdout]   |         ^^^^^^^^ help: convert the identifier to snake case: `exchange`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/aggregatedPrice/bybit.rs:254:5
[INFO] [stdout]     |
[INFO] [stdout] 254 |     test_fetch_price(price_tx).await;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 254 |     let _ = test_fetch_price(price_tx).await;
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `test_sendTx` should have a snake case name
[INFO] [stdout]   --> src/transaction/sendtx.rs:74:14
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub async fn test_sendTx() {
[INFO] [stdout]    |              ^^^^^^^^^^^ help: convert the identifier to snake case: `test_send_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 15s
[INFO] running `Command { std: "docker" "inspect" "23ed5eeb3375ae2d4d3e94754ff5ae1b34397c19ac60134223fec0930d418560", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "23ed5eeb3375ae2d4d3e94754ff5ae1b34397c19ac60134223fec0930d418560", kill_on_drop: false }`
[INFO] [stdout] 23ed5eeb3375ae2d4d3e94754ff5ae1b34397c19ac60134223fec0930d418560
