[INFO] cloning repository https://github.com/cyborg42/hurribot
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/cyborg42/hurribot" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcyborg42%2Fhurribot", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcyborg42%2Fhurribot'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 7ee14231b92829185c0d2ce264b2a7f3af480e53
[INFO] checking cyborg42/hurribot against try#ddcf048784667508cd676fef4667f88ae15628a3 for pr-148271-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcyborg42%2Fhurribot" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/cyborg42/hurribot
[INFO] finished tweaking git repo https://github.com/cyborg42/hurribot
[INFO] tweaked toml for git repo https://github.com/cyborg42/hurribot written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/cyborg42/hurribot on toolchain ddcf048784667508cd676fef4667f88ae15628a3
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+ddcf048784667508cd676fef4667f88ae15628a3" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/cyborg42/hurribot 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" "+ddcf048784667508cd676fef4667f88ae15628a3" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/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:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+ddcf048784667508cd676fef4667f88ae15628a3" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] b4a8b9f85be9260b4b445232e42608d1f74b5736a94543f4d50adf042a39805d
[INFO] running `Command { std: "docker" "start" "-a" "b4a8b9f85be9260b4b445232e42608d1f74b5736a94543f4d50adf042a39805d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "b4a8b9f85be9260b4b445232e42608d1f74b5736a94543f4d50adf042a39805d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "b4a8b9f85be9260b4b445232e42608d1f74b5736a94543f4d50adf042a39805d", kill_on_drop: false }`
[INFO] [stdout] b4a8b9f85be9260b4b445232e42608d1f74b5736a94543f4d50adf042a39805d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/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:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+ddcf048784667508cd676fef4667f88ae15628a3" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] e202a4e8d5d865c65438f2fdc2cb9cf869d484481c1a6e423168e298ad714875
[INFO] running `Command { std: "docker" "start" "-a" "e202a4e8d5d865c65438f2fdc2cb9cf869d484481c1a6e423168e298ad714875", kill_on_drop: false }`
[INFO] [stderr]    Compiling cc v1.1.7
[INFO] [stderr]     Checking log v0.4.22
[INFO] [stderr]     Checking bytes v1.6.1
[INFO] [stderr]    Compiling serde v1.0.204
[INFO] [stderr]     Checking bitflags v2.6.0
[INFO] [stderr]     Checking hashbrown v0.14.5
[INFO] [stderr]     Checking miniz_oxide v0.7.4
[INFO] [stderr]     Checking mio v1.0.1
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking futures-io v0.3.30
[INFO] [stderr]     Checking futures-util v0.3.30
[INFO] [stderr]     Checking tracing v0.1.40
[INFO] [stderr]    Compiling pathfinder_simd v0.5.4
[INFO] [stderr]    Compiling yeslogic-fontconfig-sys v5.0.0
[INFO] [stderr]     Checking smallvec v1.13.2
[INFO] [stderr]     Checking tokio v1.39.2
[INFO] [stderr]     Checking http v0.2.12
[INFO] [stderr]     Checking flate2 v1.0.30
[INFO] [stderr]     Checking indexmap v2.2.6
[INFO] [stderr]     Checking futures-channel v0.3.30
[INFO] [stderr]     Checking libloading v0.8.5
[INFO] [stderr]     Checking gimli v0.29.0
[INFO] [stderr]     Checking http-body v0.4.6
[INFO] [stderr]    Compiling serde_json v1.0.121
[INFO] [stderr]     Checking png v0.17.13
[INFO] [stderr]     Checking dlib v0.5.2
[INFO] [stderr]     Checking url v2.5.2
[INFO] [stderr]    Compiling openssl-sys v0.9.103
[INFO] [stderr]    Compiling freetype-sys v0.20.1
[INFO] [stderr]    Compiling openssl v0.10.66
[INFO] [stderr]    Compiling native-tls v0.2.12
[INFO] [stderr]    Compiling backtrace v0.3.73
[INFO] [stderr]     Checking dirs-sys-next v0.1.2
[INFO] [stderr]    Compiling cstr v0.2.12
[INFO] [stderr]     Checking object v0.36.2
[INFO] [stderr]    Compiling error-chain v0.12.4
[INFO] [stderr]     Checking weezl v0.1.8
[INFO] [stderr]     Checking plotters-backend v0.3.6
[INFO] [stderr]    Compiling font-kit v0.13.2
[INFO] [stderr]     Checking jpeg-decoder v0.3.1
[INFO] [stderr]     Checking rustc-demangle v0.1.24
[INFO] [stderr]     Checking bytemuck v1.16.1
[INFO] [stderr]     Checking clap_builder v4.5.11
[INFO] [stderr]    Compiling time-macros v0.2.18
[INFO] [stderr]     Checking image v0.24.9
[INFO] [stderr]     Checking addr2line v0.22.0
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking serde_spanned v0.6.7
[INFO] [stderr]     Checking toml_datetime v0.6.7
[INFO] [stderr]     Checking deranged v0.3.11
[INFO] [stderr]     Checking gif v0.12.0
[INFO] [stderr]     Checking tokio-util v0.7.11
[INFO] [stderr]     Checking rustls-pemfile v1.0.4
[INFO] [stderr]     Checking dirs-next v2.0.0
[INFO] [stderr]     Checking pathfinder_geometry v0.5.1
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking parking_lot_core v0.9.10
[INFO] [stderr]     Checking h2 v0.3.26
[INFO] [stderr]     Checking sharded-slab v0.1.7
[INFO] [stderr]     Checking http v1.1.0
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking crossbeam-channel v0.5.13
[INFO] [stderr]     Checking float-ord v0.3.2
[INFO] [stderr]     Checking utf-8 v0.7.6
[INFO] [stderr]     Checking winnow v0.6.16
[INFO] [stderr]     Checking sync_wrapper v0.1.2
[INFO] [stderr]     Checking num_threads v0.1.7
[INFO] [stderr]     Checking time v0.3.36
[INFO] [stderr]     Checking chrono v0.4.38
[INFO] [stderr]     Checking tracing-subscriber v0.3.18
[INFO] [stderr]     Checking plotters-bitmap v0.3.6
[INFO] [stderr]     Checking clap v4.5.11
[INFO] [stderr]     Checking plotters-svg v0.3.6
[INFO] [stderr]     Checking crossbeam-queue v0.3.11
[INFO] [stderr]     Checking ttf-parser v0.20.0
[INFO] [stderr]     Checking either v1.13.0
[INFO] [stderr]     Checking csv v1.3.0
[INFO] [stderr]     Checking crossbeam v0.8.4
[INFO] [stderr]     Checking parking_lot v0.12.3
[INFO] [stderr]     Checking rayon v1.10.0
[INFO] [stderr]     Checking dashmap v6.0.1
[INFO] [stderr]     Checking tracing-appender v0.2.3
[INFO] [stderr]     Checking tokio-native-tls v0.3.1
[INFO] [stderr]     Checking tungstenite v0.21.0
[INFO] [stderr]     Checking opaque-debug v0.3.1
[INFO] [stderr]     Checking tuples v1.15.0
[INFO] [stderr]     Checking toml_edit v0.22.17
[INFO] [stderr]     Checking hyper v0.14.30
[INFO] [stderr]     Checking plotters v0.3.6
[INFO] [stderr]     Checking toml v0.8.16
[INFO] [stderr]     Checking hyper-tls v0.5.0
[INFO] [stderr]     Checking reqwest v0.11.27
[INFO] [stderr]     Checking binance v0.21.0 (https://github.com/cyborg42/binance-rs.git#9ee76ebf)
[INFO] [stderr]     Checking hurribot v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `Receiver` and `unbounded`
[INFO] [stdout]  --> src/algorithm.rs:1:26
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crossbeam::channel::{unbounded, Receiver};
[INFO] [stdout]   |                          ^^^^^^^^^  ^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `any::Any`, `collections::HashMap`, `sleep`, and `time::Duration`
[INFO] [stdout]   --> src/controller.rs:2:5
[INFO] [stdout]    |
[INFO] [stdout]  2 |     any::Any,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]  3 |     collections::HashMap,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  7 |         Arc,
[INFO] [stdout]    |         ^^^
[INFO] [stdout]  8 |     },
[INFO] [stdout]  9 |     thread::{sleep, JoinHandle},
[INFO] [stdout]    |              ^^^^^
[INFO] [stdout] 10 |     time::Duration,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Ok` and `anyhow`
[INFO] [stdout]   --> src/controller.rs:13:14
[INFO] [stdout]    |
[INFO] [stdout] 13 | use anyhow::{anyhow, Ok};
[INFO] [stdout]    |              ^^^^^^  ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Select` and `Sender`
[INFO] [stdout]   --> src/controller.rs:15:36
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crossbeam::channel::{Receiver, Select, Sender};
[INFO] [stdout]    |                                    ^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Scope`
[INFO] [stdout]   --> src/controller.rs:18:25
[INFO] [stdout]    |
[INFO] [stdout] 18 | use rayon::{prelude::*, Scope};
[INFO] [stdout]    |                         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::error`
[INFO] [stdout]   --> src/controller.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tracing::error;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StrategyOrderReturn`
[INFO] [stdout]   --> src/controller.rs:24:26
[INFO] [stdout]    |
[INFO] [stdout] 24 |     strategy::{Strategy, StrategyOrderReturn},
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver` and `Sender`
[INFO] [stdout]  --> src/market.rs:2:26
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crossbeam::channel::{Receiver, Sender};
[INFO] [stdout]   |                          ^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ParallelBridge`, `ParallelIterator`, and `result`
[INFO] [stdout]  --> src/market.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 |     iter::{ParallelBridge, ParallelIterator},
[INFO] [stdout]   |            ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 5 |     result,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude`
[INFO] [stdout]   --> src/controller.rs:18:13
[INFO] [stdout]    |
[INFO] [stdout] 18 | use rayon::{prelude::*, Scope};
[INFO] [stdout]    |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver` and `unbounded`
[INFO] [stdout]  --> src/algorithm.rs:1:26
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crossbeam::channel::{unbounded, Receiver};
[INFO] [stdout]   |                          ^^^^^^^^^  ^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `any::Any`, `collections::HashMap`, `sleep`, and `time::Duration`
[INFO] [stdout]   --> src/controller.rs:2:5
[INFO] [stdout]    |
[INFO] [stdout]  2 |     any::Any,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]  3 |     collections::HashMap,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  7 |         Arc,
[INFO] [stdout]    |         ^^^
[INFO] [stdout]  8 |     },
[INFO] [stdout]  9 |     thread::{sleep, JoinHandle},
[INFO] [stdout]    |              ^^^^^
[INFO] [stdout] 10 |     time::Duration,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Ok` and `anyhow`
[INFO] [stdout]   --> src/controller.rs:13:14
[INFO] [stdout]    |
[INFO] [stdout] 13 | use anyhow::{anyhow, Ok};
[INFO] [stdout]    |              ^^^^^^  ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Select` and `Sender`
[INFO] [stdout]   --> src/controller.rs:15:36
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crossbeam::channel::{Receiver, Select, Sender};
[INFO] [stdout]    |                                    ^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Scope`
[INFO] [stdout]   --> src/controller.rs:18:25
[INFO] [stdout]    |
[INFO] [stdout] 18 | use rayon::{prelude::*, Scope};
[INFO] [stdout]    |                         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::error`
[INFO] [stdout]   --> src/controller.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tracing::error;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StrategyOrderReturn`
[INFO] [stdout]   --> src/controller.rs:24:26
[INFO] [stdout]    |
[INFO] [stdout] 24 |     strategy::{Strategy, StrategyOrderReturn},
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver` and `Sender`
[INFO] [stdout]  --> src/market.rs:2:26
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crossbeam::channel::{Receiver, Sender};
[INFO] [stdout]   |                          ^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ParallelBridge`, `ParallelIterator`, and `result`
[INFO] [stdout]  --> src/market.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 |     iter::{ParallelBridge, ParallelIterator},
[INFO] [stdout]   |            ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 5 |     result,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `time`
[INFO] [stdout]   --> src/controller.rs:83:39
[INFO] [stdout]    |
[INFO] [stdout] 83 |             AccountInfo::OrderTrade { time, order } => {
[INFO] [stdout]    |                                       ^^^^ help: try ignoring the field: `time: _`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `order`
[INFO] [stdout]   --> src/controller.rs:83:45
[INFO] [stdout]    |
[INFO] [stdout] 83 |             AccountInfo::OrderTrade { time, order } => {
[INFO] [stdout]    |                                             ^^^^^ help: try ignoring the field: `order: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `interval` is never read
[INFO] [stdout]  --> src/backtest/candle_chart.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct CandleChart {
[INFO] [stdout]   |            ----------- field in this struct
[INFO] [stdout] 8 |     /// k线间隔（秒）
[INFO] [stdout] 9 |     interval: Duration,
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `CandleChart` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new` and `linear` are never used
[INFO] [stdout]    --> src/backtest/strategy/roll_strategy.rs:155:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | impl RollConfig {
[INFO] [stdout]     | --------------- associated functions in this implementation
[INFO] [stdout] 155 |     pub fn new(config: Vec<(Leverage, TakeProfit, MaxDraw)>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     fn linear(k: f64, b: f64, max: f64, _step: f64) -> Self {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RollJudge` is never constructed
[INFO] [stdout]    --> src/backtest/strategy/roll_strategy.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | struct RollJudge {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `update`, `max`, `min`, `is_max`, and `is_min` are never used
[INFO] [stdout]    --> src/backtest/strategy/roll_strategy.rs:192:8
[INFO] [stdout]     |
[INFO] [stdout] 191 | impl RollJudge {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 192 |     fn new(max_length: usize) -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     fn update(&mut self, candle: &CandleData) {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     fn max(&self, size: usize) -> CandleData {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     fn min(&self, size: usize) -> CandleData {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     fn is_max(&self, size: usize) -> bool {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     fn is_min(&self, size: usize) -> bool {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Controller` is never constructed
[INFO] [stdout]   --> src/controller.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | struct Controller<M> {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `run`, `input_signal`, and `update_account` are never used
[INFO] [stdout]   --> src/controller.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 39 | impl<M: Market> Controller<M> {
[INFO] [stdout]    | ----------------------------- methods in this implementation
[INFO] [stdout] 40 |     fn run(
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     fn input_signal(&self, signal: SymbolPrice) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     fn update_account(&self, account_info: AccountInfo) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Position` is never constructed
[INFO] [stdout]    --> src/controller.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | struct Position {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/controller.rs:76:17
[INFO] [stdout]    |
[INFO] [stdout] 76 |                 self.market.order(market_order_request);
[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)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 76 |                 let _ = self.market.order(market_order_request);
[INFO] [stdout]    |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude`
[INFO] [stdout]   --> src/controller.rs:18:13
[INFO] [stdout]    |
[INFO] [stdout] 18 | use rayon::{prelude::*, Scope};
[INFO] [stdout]    |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `time`
[INFO] [stdout]   --> src/controller.rs:83:39
[INFO] [stdout]    |
[INFO] [stdout] 83 |             AccountInfo::OrderTrade { time, order } => {
[INFO] [stdout]    |                                       ^^^^ help: try ignoring the field: `time: _`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `order`
[INFO] [stdout]   --> src/controller.rs:83:45
[INFO] [stdout]    |
[INFO] [stdout] 83 |             AccountInfo::OrderTrade { time, order } => {
[INFO] [stdout]    |                                             ^^^^^ help: try ignoring the field: `order: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `interval` is never read
[INFO] [stdout]  --> src/backtest/candle_chart.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct CandleChart {
[INFO] [stdout]   |            ----------- field in this struct
[INFO] [stdout] 8 |     /// k线间隔（秒）
[INFO] [stdout] 9 |     interval: Duration,
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `CandleChart` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/backtest/strategy/roll_strategy.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl RollOnceStrategy {
[INFO] [stdout]    | --------------------- associated function in this implementation
[INFO] [stdout] 30 |     fn new(is_bull: bool, capital: f64, config: RollConfig) -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new` and `linear` are never used
[INFO] [stdout]    --> src/backtest/strategy/roll_strategy.rs:155:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | impl RollConfig {
[INFO] [stdout]     | --------------- associated functions in this implementation
[INFO] [stdout] 155 |     pub fn new(config: Vec<(Leverage, TakeProfit, MaxDraw)>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     fn linear(k: f64, b: f64, max: f64, _step: f64) -> Self {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RollJudge` is never constructed
[INFO] [stdout]    --> src/backtest/strategy/roll_strategy.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | struct RollJudge {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `update`, `max`, `min`, `is_max`, and `is_min` are never used
[INFO] [stdout]    --> src/backtest/strategy/roll_strategy.rs:192:8
[INFO] [stdout]     |
[INFO] [stdout] 191 | impl RollJudge {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 192 |     fn new(max_length: usize) -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     fn update(&mut self, candle: &CandleData) {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     fn max(&self, size: usize) -> CandleData {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     fn min(&self, size: usize) -> CandleData {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     fn is_max(&self, size: usize) -> bool {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     fn is_min(&self, size: usize) -> bool {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Controller` is never constructed
[INFO] [stdout]   --> src/controller.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | struct Controller<M> {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `run`, `input_signal`, and `update_account` are never used
[INFO] [stdout]   --> src/controller.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 39 | impl<M: Market> Controller<M> {
[INFO] [stdout]    | ----------------------------- methods in this implementation
[INFO] [stdout] 40 |     fn run(
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     fn input_signal(&self, signal: SymbolPrice) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     fn update_account(&self, account_info: AccountInfo) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Position` is never constructed
[INFO] [stdout]    --> src/controller.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | struct Position {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/controller.rs:76:17
[INFO] [stdout]    |
[INFO] [stdout] 76 |                 self.market.order(market_order_request);
[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)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 76 |                 let _ = self.market.order(market_order_request);
[INFO] [stdout]    |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `market`
[INFO] [stdout]  --> src/main.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 |     market,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `market`
[INFO] [stdout]  --> src/main.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 |     market,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `price_rx`
[INFO] [stdout]   --> src/main.rs:11:10
[INFO] [stdout]    |
[INFO] [stdout] 11 |     let (price_rx, prices, conn_h) = FuturesWsConnection::run_price_info();
[INFO] [stdout]    |          ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_price_rx`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `any::Any`, `atomic::AtomicI32`, and `thread::sleep`
[INFO] [stdout]  --> tests/tests.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 |     any::Any,
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 3 |     sync::{atomic::AtomicI32, Arc},
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^  ^^^
[INFO] [stdout] 4 |     thread::sleep,
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `dashmap::DashMap`
[INFO] [stdout]  --> tests/tests.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use dashmap::DashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `prices`
[INFO] [stdout]   --> src/main.rs:11:20
[INFO] [stdout]    |
[INFO] [stdout] 11 |     let (price_rx, prices, conn_h) = FuturesWsConnection::run_price_info();
[INFO] [stdout]    |                    ^^^^^^ help: if this is intentional, prefix it with an underscore: `_prices`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `binance_keys`
[INFO] [stdout]   --> src/main.rs:12:9
[INFO] [stdout]    |
[INFO] [stdout] 12 |     let binance_keys = BinanceKeys::value_parse("./config/binance_keys.toml").unwrap();
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_binance_keys`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rayon::prelude::*`
[INFO] [stdout]  --> tests/tests.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use rayon::prelude::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `price_rx`
[INFO] [stdout]   --> src/main.rs:11:10
[INFO] [stdout]    |
[INFO] [stdout] 11 |     let (price_rx, prices, conn_h) = FuturesWsConnection::run_price_info();
[INFO] [stdout]    |          ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_price_rx`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `prices`
[INFO] [stdout]   --> src/main.rs:11:20
[INFO] [stdout]    |
[INFO] [stdout] 11 |     let (price_rx, prices, conn_h) = FuturesWsConnection::run_price_info();
[INFO] [stdout]    |                    ^^^^^^ help: if this is intentional, prefix it with an underscore: `_prices`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `binance_keys`
[INFO] [stdout]   --> src/main.rs:12:9
[INFO] [stdout]    |
[INFO] [stdout] 12 |     let binance_keys = BinanceKeys::value_parse("./config/binance_keys.toml").unwrap();
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_binance_keys`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 19s
[INFO] running `Command { std: "docker" "inspect" "e202a4e8d5d865c65438f2fdc2cb9cf869d484481c1a6e423168e298ad714875", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e202a4e8d5d865c65438f2fdc2cb9cf869d484481c1a6e423168e298ad714875", kill_on_drop: false }`
[INFO] [stdout] e202a4e8d5d865c65438f2fdc2cb9cf869d484481c1a6e423168e298ad714875
