[INFO] cloning repository https://github.com/pieterjandubois/FundingSpreadArbitrageV2
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/pieterjandubois/FundingSpreadArbitrageV2" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fpieterjandubois%2FFundingSpreadArbitrageV2", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fpieterjandubois%2FFundingSpreadArbitrageV2'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 4054f6fcba5dd195658cfd8a832183658917c34c
[INFO] checking pieterjandubois/FundingSpreadArbitrageV2 against try#54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47 for pr-153041
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fpieterjandubois%2FFundingSpreadArbitrageV2" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/pieterjandubois/FundingSpreadArbitrageV2
[INFO] finished tweaking git repo https://github.com/pieterjandubois/FundingSpreadArbitrageV2
[INFO] tweaked toml for git repo https://github.com/pieterjandubois/FundingSpreadArbitrageV2 written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/pieterjandubois/FundingSpreadArbitrageV2 on toolchain 54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/pieterjandubois/FundingSpreadArbitrageV2 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" "+54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[ERROR] error running command: no output for 300 seconds
[INFO] checking pieterjandubois/FundingSpreadArbitrageV2 against try#54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47 for pr-153041
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fpieterjandubois%2FFundingSpreadArbitrageV2" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/pieterjandubois/FundingSpreadArbitrageV2
[INFO] finished tweaking git repo https://github.com/pieterjandubois/FundingSpreadArbitrageV2
[INFO] tweaked toml for git repo https://github.com/pieterjandubois/FundingSpreadArbitrageV2 written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/pieterjandubois/FundingSpreadArbitrageV2 on toolchain 54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/pieterjandubois/FundingSpreadArbitrageV2 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" "+54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded utf-8 v0.7.6
[INFO] [stderr]   Downloaded tokio-tungstenite v0.21.0
[INFO] [stderr]   Downloaded rustls-pki-types v1.14.0
[INFO] [stderr]   Downloaded uuid v1.20.0
[INFO] [stderr]   Downloaded ref-cast-impl v1.0.25
[INFO] [stderr]   Downloaded unarray v0.1.4
[INFO] [stderr]   Downloaded num_cpus v1.17.0
[INFO] [stderr]   Downloaded core_affinity v0.8.3
[INFO] [stderr]   Downloaded ref-cast v1.0.25
[INFO] [stderr]   Downloaded rusty-fork v0.3.1
[INFO] [stderr]   Downloaded hyper-rustls v0.24.2
[INFO] [stderr]   Downloaded iana-time-zone v0.1.65
[INFO] [stderr]   Downloaded ryu v1.0.22
[INFO] [stderr]   Downloaded lexical-write-integer v1.0.6
[INFO] [stderr]   Downloaded lexical-write-float v1.0.6
[INFO] [stderr]   Downloaded mio v1.1.1
[INFO] [stderr]   Downloaded lexical-util v1.0.7
[INFO] [stderr]   Downloaded simd-json v0.13.11
[INFO] [stderr]   Downloaded http v1.4.0
[INFO] [stderr]   Downloaded tokio-util v0.7.18
[INFO] [stderr]   Downloaded proptest v1.9.0
[INFO] [stderr]   Downloaded lexical-parse-float v1.0.6
[INFO] [stderr]   Downloaded redis v0.25.4
[INFO] [stderr]   Downloaded chrono v0.4.43
[INFO] [stderr]   Downloaded syn v2.0.114
[INFO] [stderr]   Downloaded zerocopy v0.8.34
[INFO] [stderr]   Downloaded rustls v0.22.4
[INFO] [stderr]   Downloaded webpki-roots v1.0.5
[INFO] [stderr]   Downloaded zerocopy-derive v0.8.34
[INFO] [stderr]   Downloaded socket2 v0.6.2
[INFO] [stderr]   Downloaded cc v1.2.54
[INFO] [stderr]   Downloaded tokio-rustls v0.24.1
[INFO] [stderr]   Downloaded lexical-parse-integer v1.0.6
[INFO] [stderr]   Downloaded zmij v1.0.17
[INFO] [stderr]   Downloaded ratatui v0.27.0
[INFO] [stderr]   Downloaded value-trait v0.8.1
[INFO] [stderr]   Downloaded find-msvc-tools v0.1.8
[INFO] [stderr]   Downloaded lexical-core v1.0.6
[INFO] [stderr]   Downloaded halfbrown v0.2.5
[INFO] [stderr]   Downloaded tokio-rustls v0.25.0
[INFO] [stderr]   Downloaded data-encoding v2.10.0
[INFO] [stderr]   Downloaded tungstenite v0.21.0
[INFO] [stderr]   Downloaded rand_xorshift v0.4.0
[INFO] [stderr]   Downloaded tokio v1.49.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-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:61361fe0aef631f17e9d025a70c5a647956f8c671dd02950a60ad3f5cc5526d7" "/opt/rustwide/cargo-home/bin/cargo" "+54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] f36974d0dafbca2fa86f0fcfc2a2da8b78f09ce01da21e00575441b17d9fcd3d
[INFO] running `Command { std: "docker" "start" "-a" "f36974d0dafbca2fa86f0fcfc2a2da8b78f09ce01da21e00575441b17d9fcd3d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "f36974d0dafbca2fa86f0fcfc2a2da8b78f09ce01da21e00575441b17d9fcd3d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f36974d0dafbca2fa86f0fcfc2a2da8b78f09ce01da21e00575441b17d9fcd3d", kill_on_drop: false }`
[INFO] [stdout] f36974d0dafbca2fa86f0fcfc2a2da8b78f09ce01da21e00575441b17d9fcd3d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-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:61361fe0aef631f17e9d025a70c5a647956f8c671dd02950a60ad3f5cc5526d7" "/opt/rustwide/cargo-home/bin/cargo" "+54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 8ce1645d88cd5307a32af6e53cf98363c06af45878e0db655864db9a1eb5efe6
[INFO] running `Command { std: "docker" "start" "-a" "8ce1645d88cd5307a32af6e53cf98363c06af45878e0db655864db9a1eb5efe6", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling quote v1.0.44
[INFO] [stderr]    Compiling libc v0.2.180
[INFO] [stderr]     Checking log v0.4.29
[INFO] [stderr]    Compiling find-msvc-tools v0.1.8
[INFO] [stderr]     Checking itoa v1.0.17
[INFO] [stderr]    Compiling zerocopy v0.8.34
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]    Compiling typenum v1.19.0
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling icu_properties_data v2.1.2
[INFO] [stderr]     Checking allocator-api2 v0.2.21
[INFO] [stderr]     Checking zeroize v1.8.2
[INFO] [stderr]     Checking subtle v2.6.1
[INFO] [stderr]     Checking bitflags v2.10.0
[INFO] [stderr]    Compiling autocfg v1.5.0
[INFO] [stderr]    Compiling cc v1.2.54
[INFO] [stderr]     Checking rustls-pki-types v1.14.0
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling httparse v1.10.1
[INFO] [stderr]     Checking ryu v1.0.22
[INFO] [stderr]     Checking form_urlencoded v1.2.2
[INFO] [stderr]     Checking lexical-util v1.0.7
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]     Checking http v0.2.12
[INFO] [stderr]     Checking tracing-core v0.1.36
[INFO] [stderr]    Compiling rustls v0.21.12
[INFO] [stderr]    Compiling zmij v1.0.17
[INFO] [stderr]     Checking memchr v2.7.6
[INFO] [stderr]    Compiling rustls v0.22.4
[INFO] [stderr]     Checking indexmap v2.13.0
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]     Checking cpufeatures v0.2.17
[INFO] [stderr]     Checking futures-channel v0.3.31
[INFO] [stderr]     Checking foldhash v0.1.5
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking byteorder v1.5.0
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling ref-cast v1.0.25
[INFO] [stderr]     Checking hashbrown v0.15.5
[INFO] [stderr]     Checking itertools v0.13.0
[INFO] [stderr]    Compiling syn v2.0.114
[INFO] [stderr]     Checking webpki-roots v1.0.5
[INFO] [stderr]     Checking castaway v0.2.4
[INFO] [stderr]     Checking http-body v0.4.6
[INFO] [stderr]     Checking http v1.4.0
[INFO] [stderr]     Checking lexical-parse-integer v1.0.6
[INFO] [stderr]     Checking lexical-write-integer v1.0.6
[INFO] [stderr]     Checking linux-raw-sys v0.4.15
[INFO] [stderr]     Checking base64 v0.21.7
[INFO] [stderr]     Checking unicode-width v0.1.14
[INFO] [stderr]     Checking static_assertions v1.1.0
[INFO] [stderr]     Checking lexical-parse-float v1.0.6
[INFO] [stderr]     Checking data-encoding v2.10.0
[INFO] [stderr]     Checking utf-8 v0.7.6
[INFO] [stderr]     Checking rustls-pemfile v1.0.4
[INFO] [stderr]     Checking lexical-write-float v1.0.6
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]     Checking mio v1.1.1
[INFO] [stderr]     Checking socket2 v0.6.2
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking mio v0.8.11
[INFO] [stderr]     Checking socket2 v0.5.10
[INFO] [stderr]     Checking block-buffer v0.10.4
[INFO] [stderr]     Checking crypto-common v0.1.7
[INFO] [stderr]     Checking float-cmp v0.9.0
[INFO] [stderr]     Checking lexical-core v1.0.6
[INFO] [stderr]     Checking lru v0.12.5
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking num_cpus v1.17.0
[INFO] [stderr]     Checking compact_str v0.7.1
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking webpki-roots v0.26.11
[INFO] [stderr]     Checking encoding_rs v0.8.35
[INFO] [stderr]     Checking ipnet v2.11.0
[INFO] [stderr]     Checking sync_wrapper v0.1.2
[INFO] [stderr]     Checking iana-time-zone v0.1.65
[INFO] [stderr]     Checking webpki-roots v0.25.4
[INFO] [stderr]     Checking mime v0.3.17
[INFO] [stderr]     Checking cassowary v0.3.0
[INFO] [stderr]     Checking simdutf8 v0.1.5
[INFO] [stderr]     Checking signal-hook-mio v0.2.5
[INFO] [stderr]     Checking core_affinity v0.8.3
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]     Checking chrono v0.4.43
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]     Checking crossterm v0.27.0
[INFO] [stderr]     Checking sha2 v0.10.9
[INFO] [stderr]     Checking hmac v0.12.1
[INFO] [stderr]     Checking uuid v1.20.0
[INFO] [stderr]     Checking dotenv v0.15.0
[INFO] [stderr]     Checking hex v0.4.3
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]     Checking rand_core v0.9.5
[INFO] [stderr]     Checking linux-raw-sys v0.11.0
[INFO] [stderr]     Checking crossbeam-queue v0.3.12
[INFO] [stderr]     Checking wait-timeout v0.2.1
[INFO] [stderr]     Checking unicode-truncate v1.1.0
[INFO] [stderr]     Checking bit-vec v0.8.0
[INFO] [stderr]     Checking quick-error v1.2.3
[INFO] [stderr]     Checking rand_xorshift v0.4.0
[INFO] [stderr]     Checking rand v0.9.2
[INFO] [stderr]     Checking unarray v0.1.4
[INFO] [stderr]     Checking crossterm v0.28.1
[INFO] [stderr]     Checking bit-set v0.8.0
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking hashbrown v0.14.5
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking dashmap v5.5.3
[INFO] [stderr]     Checking tempfile v3.24.0
[INFO] [stderr]     Checking rusty-fork v0.3.1
[INFO] [stderr]     Checking proptest v1.9.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling ref-cast-impl v1.0.25
[INFO] [stderr]    Compiling stability v0.2.1
[INFO] [stderr]    Compiling zerocopy-derive v0.7.35
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]     Checking sct v0.7.1
[INFO] [stderr]     Checking rustls-webpki v0.101.7
[INFO] [stderr]     Checking rustls-webpki v0.102.8
[INFO] [stderr]     Checking tokio v1.49.0
[INFO] [stderr]     Checking zerocopy v0.7.35
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]     Checking zerofrom v0.1.6
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking yoke v0.8.1
[INFO] [stderr]     Checking zerovec v0.11.5
[INFO] [stderr]     Checking zerotrie v0.2.3
[INFO] [stderr]     Checking strum v0.26.3
[INFO] [stderr]     Checking ratatui v0.27.0
[INFO] [stderr]     Checking tinystr v0.8.2
[INFO] [stderr]     Checking potential_utf v0.1.4
[INFO] [stderr]     Checking icu_collections v2.1.1
[INFO] [stderr]     Checking icu_locale_core v2.1.1
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking icu_provider v2.1.1
[INFO] [stderr]     Checking icu_properties v2.1.2
[INFO] [stderr]     Checking icu_normalizer v2.1.1
[INFO] [stderr]     Checking halfbrown v0.2.5
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking value-trait v0.8.1
[INFO] [stderr]     Checking simd-json v0.13.11
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking tokio-util v0.7.18
[INFO] [stderr]     Checking tokio-rustls v0.24.1
[INFO] [stderr]     Checking tokio-rustls v0.25.0
[INFO] [stderr]     Checking tungstenite v0.21.0
[INFO] [stderr]     Checking h2 v0.3.27
[INFO] [stderr]     Checking combine v4.6.7
[INFO] [stderr]     Checking tokio-tungstenite v0.21.0
[INFO] [stderr]     Checking hyper v0.14.32
[INFO] [stderr]     Checking redis v0.25.4
[INFO] [stderr]     Checking hyper-rustls v0.24.2
[INFO] [stderr]     Checking reqwest v0.11.27
[INFO] [stderr]     Checking arbitrage2 v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `redis::aio::MultiplexedConnection`
[INFO] [stdout]   --> src/strategy/opportunity_detector.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | use redis::aio::MultiplexedConnection;
[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: `redis::aio::MultiplexedConnection`
[INFO] [stdout]   --> src/strategy/opportunity_detector.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | use redis::aio::MultiplexedConnection;
[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: `redis::AsyncCommands`
[INFO] [stdout]   --> src/strategy/opportunity_detector.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | use redis::AsyncCommands;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `TestnetConfig` has no field named `binance`
[INFO] [stdout]    --> src/strategy/price_chaser.rs:258:13
[INFO] [stdout]     |
[INFO] [stdout] 258 |             binance: None,
[INFO] [stdout]     |             ^^^^^^^ `TestnetConfig` does not have this field
[INFO] [stdout]     |
[INFO] [stdout]     = note: all struct fields are already assigned
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `redis::AsyncCommands`
[INFO] [stdout]   --> src/strategy/opportunity_detector.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | use redis::AsyncCommands;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `target_quantity`
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:444:9
[INFO] [stdout]     |
[INFO] [stdout] 444 |         target_quantity: f64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_quantity`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `api_duration`
[INFO] [stdout]    --> src/strategy/entry.rs:848:29
[INFO] [stdout]     |
[INFO] [stdout] 848 |                         let api_duration = api_start.elapsed().as_millis();
[INFO] [stdout]     |                             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_api_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `long_filled` is never read
[INFO] [stdout]     --> src/strategy/entry.rs:2033:45
[INFO] [stdout]      |
[INFO] [stdout] 2033 | ...                   long_filled = true;
[INFO] [stdout]      |                       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout]      = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `short_filled` is never read
[INFO] [stdout]     --> src/strategy/entry.rs:1775:45
[INFO] [stdout]      |
[INFO] [stdout] 1775 | ...                   short_filled = true;
[INFO] [stdout]      |                       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `target_quantity`
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:444:9
[INFO] [stdout]     |
[INFO] [stdout] 444 |         target_quantity: f64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_quantity`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `api_duration`
[INFO] [stdout]    --> src/strategy/entry.rs:848:29
[INFO] [stdout]     |
[INFO] [stdout] 848 |                         let api_duration = api_start.elapsed().as_millis();
[INFO] [stdout]     |                             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_api_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `long_filled` is never read
[INFO] [stdout]     --> src/strategy/entry.rs:2033:45
[INFO] [stdout]      |
[INFO] [stdout] 2033 | ...                   long_filled = true;
[INFO] [stdout]      |                       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout]      = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `short_filled` is never read
[INFO] [stdout]     --> src/strategy/entry.rs:1775:45
[INFO] [stdout]      |
[INFO] [stdout] 1775 | ...                   short_filled = true;
[INFO] [stdout]      |                       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `symbol`
[INFO] [stdout]   --> src/strategy/testnet_backend.rs:71:62
[INFO] [stdout]    |
[INFO] [stdout] 71 |     async fn set_margin_type_isolated(&self, exchange: &str, symbol: &str) -> Result<(), Box<dyn Error + Send + Sync>> {
[INFO] [stdout]    |                                                              ^^^^^^ help: if this is intentional, prefix it with an underscore: `_symbol`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `symbol`
[INFO] [stdout]   --> src/strategy/testnet_backend.rs:71:62
[INFO] [stdout]    |
[INFO] [stdout] 71 |     async fn set_margin_type_isolated(&self, exchange: &str, symbol: &str) -> Result<(), Box<dyn Error + Send + Sync>> {
[INFO] [stdout]    |                                                              ^^^^^^ help: if this is intentional, prefix it with an underscore: `_symbol`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `retry_3`
[INFO] [stdout]    --> src/strategy/fill_probability.rs:306:13
[INFO] [stdout]     |
[INFO] [stdout] 306 |         let retry_3 = estimator.should_retry_limit(&order_book, OrderSide::Long, 500.0, 3);
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_retry_3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PipelineMetrics`
[INFO] [stdout]  --> tests/pipeline_test.rs:1:54
[INFO] [stdout]   |
[INFO] [stdout] 1 | use arbitrage2::strategy::pipeline::{MarketPipeline, PipelineMetrics};
[INFO] [stdout]   |                                                      ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `arbitrage2::strategy::testnet::binance_demo`
[INFO] [stdout]  --> tests/binance_best_ask_integration_test.rs:4:36
[INFO] [stdout]   |
[INFO] [stdout] 4 | use arbitrage2::strategy::testnet::binance_demo::BinanceDemoClient;
[INFO] [stdout]   |                                    ^^^^^^^^^^^^ could not find `binance_demo` in `testnet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `TestnetConfig` has no field named `binance`
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 18 |         binance: None,
[INFO] [stdout]    |         ^^^^^^^ `TestnetConfig` does not have this field
[INFO] [stdout]    |
[INFO] [stdout]    = note: all struct fields are already assigned
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0432`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `arbitrage2` (test "binance_best_ask_integration_test") due to 1 previous error
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] error[E0061]: this method takes 0 arguments but 2 arguments were supplied
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:136:13
[INFO] [stdout]     |
[INFO] [stdout] 136 |     metrics.log_summary("binance", "BTCUSDT");
[INFO] [stdout]     |             ^^^^^^^^^^^ ---------  --------- unexpected argument #2 of type `&'static str`
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         unexpected argument #1 of type `&'static str`
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:146:12
[INFO] [stdout]     |
[INFO] [stdout] 146 |     pub fn log_summary(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] help: remove the extra arguments
[INFO] [stdout]     |
[INFO] [stdout] 136 -     metrics.log_summary("binance", "BTCUSDT");
[INFO] [stdout] 136 +     metrics.log_summary();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]    --> tests/synthetic_config_test.rs:298:9
[INFO] [stdout]     |
[INFO] [stdout] 298 |     let result = SyntheticConfig::from_env();
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `total_reprice_time` on type `HedgeTimingMetrics`
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:159:24
[INFO] [stdout]     |
[INFO] [stdout] 159 |     assert_eq!(metrics.total_reprice_time.as_secs(), 0);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `fill_detected_at`, `other_leg_check_at`, `cancel_initiated_at`, `cancel_completed_at`, `market_order_initiated_at` ... and 9 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:33:15
[INFO] [stdout]    |
[INFO] [stdout] 33 |         side: "buy".to_string(),
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^ expected `OrderSide`, found `String`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:34:21
[INFO] [stdout]    |
[INFO] [stdout] 34 |         order_type: "limit".to_string(),
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^^^^^ expected `OrderType`, found `String`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `SimulatedOrder` has no field named `quantity`
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:35:9
[INFO] [stdout]    |
[INFO] [stdout] 35 |         quantity: 0.001,
[INFO] [stdout]    |         ^^^^^^^^ `SimulatedOrder` does not have this field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `size`, `queue_position`, `created_at`, `filled_at`, `fill_price`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:37:17
[INFO] [stdout]    |
[INFO] [stdout] 37 |         status: "new".to_string(),
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^ expected `OrderStatus`, found `String`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `SimulatedOrder` has no field named `filled_quantity`
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 38 |         filled_quantity: 0.0,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^ `SimulatedOrder` does not have this field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `size`, `queue_position`, `created_at`, `filled_at`, `fill_price`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `SimulatedOrder` has no field named `average_fill_price`
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 39 |         average_fill_price: 0.0,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^ `SimulatedOrder` does not have this field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `size`, `queue_position`, `created_at`, `filled_at`, `fill_price`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `SimulatedOrder` has no field named `timestamp`
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:40:9
[INFO] [stdout]    |
[INFO] [stdout] 40 |         timestamp: chrono::Utc::now().timestamp_millis() as u64,
[INFO] [stdout]    |         ^^^^^^^^^ `SimulatedOrder` does not have this field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `size`, `queue_position`, `created_at`, `filled_at`, `fill_price`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 0 arguments but 1 argument was supplied
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:202:13
[INFO] [stdout]     |
[INFO] [stdout] 202 |     metrics.record_reprice(reprice_duration_1);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ ------------------ unexpected argument of type `Duration`
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  71 |     pub fn record_reprice(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] help: remove the extra argument
[INFO] [stdout]     |
[INFO] [stdout] 202 -     metrics.record_reprice(reprice_duration_1);
[INFO] [stdout] 202 +     metrics.record_reprice();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `total_reprice_time` on type `HedgeTimingMetrics`
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:206:24
[INFO] [stdout]     |
[INFO] [stdout] 206 |     assert_eq!(metrics.total_reprice_time.as_millis(), 50);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `fill_detected_at`, `other_leg_check_at`, `cancel_initiated_at`, `cancel_completed_at`, `market_order_initiated_at` ... and 9 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 0 arguments but 1 argument was supplied
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:213:13
[INFO] [stdout]     |
[INFO] [stdout] 213 |     metrics.record_reprice(reprice_duration_2);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ ------------------ unexpected argument of type `Duration`
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  71 |     pub fn record_reprice(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] help: remove the extra argument
[INFO] [stdout]     |
[INFO] [stdout] 213 -     metrics.record_reprice(reprice_duration_2);
[INFO] [stdout] 213 +     metrics.record_reprice();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `total_reprice_time` on type `HedgeTimingMetrics`
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:223:24
[INFO] [stdout]     |
[INFO] [stdout] 223 |     assert_eq!(metrics.total_reprice_time.as_millis(), 80);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `fill_detected_at`, `other_leg_check_at`, `cancel_initiated_at`, `cancel_completed_at`, `market_order_initiated_at` ... and 9 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `TestnetConfig` has no field named `binance`
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |         binance: Some(ExchangeCredentials {
[INFO] [stdout]    |         ^^^^^^^ `TestnetConfig` does not have this field
[INFO] [stdout]    |
[INFO] [stdout]    = note: all struct fields are already assigned
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:83:15
[INFO] [stdout]    |
[INFO] [stdout] 83 |         side: "buy".to_string(),
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^ expected `OrderSide`, found `String`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:84:21
[INFO] [stdout]    |
[INFO] [stdout] 84 |         order_type: "limit".to_string(),
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^^^^^ expected `OrderType`, found `String`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `SimulatedOrder` has no field named `quantity`
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:85:9
[INFO] [stdout]    |
[INFO] [stdout] 85 |         quantity: 0.001,
[INFO] [stdout]    |         ^^^^^^^^ `SimulatedOrder` does not have this field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `size`, `queue_position`, `created_at`, `filled_at`, `fill_price`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:87:17
[INFO] [stdout]    |
[INFO] [stdout] 87 |         status: "new".to_string(),
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^ expected `OrderStatus`, found `String`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `SimulatedOrder` has no field named `filled_quantity`
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:88:9
[INFO] [stdout]    |
[INFO] [stdout] 88 |         filled_quantity: 0.0,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^ `SimulatedOrder` does not have this field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `size`, `queue_position`, `created_at`, `filled_at`, `fill_price`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `SimulatedOrder` has no field named `average_fill_price`
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:89:9
[INFO] [stdout]    |
[INFO] [stdout] 89 |         average_fill_price: 0.0,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^ `SimulatedOrder` does not have this field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `size`, `queue_position`, `created_at`, `filled_at`, `fill_price`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `SimulatedOrder` has no field named `timestamp`
[INFO] [stdout]   --> tests/testnet_backend_single_exchange_test.rs:90:9
[INFO] [stdout]    |
[INFO] [stdout] 90 |         timestamp: chrono::Utc::now().timestamp_millis() as u64,
[INFO] [stdout]    |         ^^^^^^^^^ `SimulatedOrder` does not have this field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `size`, `queue_position`, `created_at`, `filled_at`, `fill_price`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0560`.
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 0 arguments but 1 argument was supplied
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:232:17
[INFO] [stdout]     |
[INFO] [stdout] 232 |         metrics.record_reprice(Duration::from_millis(i * 10));
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^ ----------------------------- unexpected argument of type `Duration`
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  71 |     pub fn record_reprice(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] help: remove the extra argument
[INFO] [stdout]     |
[INFO] [stdout] 232 -         metrics.record_reprice(Duration::from_millis(i * 10));
[INFO] [stdout] 232 +         metrics.record_reprice();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `total_reprice_time` on type `HedgeTimingMetrics`
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:237:24
[INFO] [stdout]     |
[INFO] [stdout] 237 |     assert_eq!(metrics.total_reprice_time.as_millis(), 150);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `fill_detected_at`, `other_leg_check_at`, `cancel_initiated_at`, `cancel_completed_at`, `market_order_initiated_at` ... and 9 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 0 arguments but 1 argument was supplied
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:257:13
[INFO] [stdout]     |
[INFO] [stdout] 257 |     metrics.record_reprice(Duration::from_millis(25));
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ ------------------------- unexpected argument of type `Duration`
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  71 |     pub fn record_reprice(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] help: remove the extra argument
[INFO] [stdout]     |
[INFO] [stdout] 257 -     metrics.record_reprice(Duration::from_millis(25));
[INFO] [stdout] 257 +     metrics.record_reprice();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0308, E0560.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0308`.
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 0 arguments but 1 argument was supplied
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:259:13
[INFO] [stdout]     |
[INFO] [stdout] 259 |     metrics.record_reprice(Duration::from_millis(30));
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ ------------------------- unexpected argument of type `Duration`
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  71 |     pub fn record_reprice(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] help: remove the extra argument
[INFO] [stdout]     |
[INFO] [stdout] 259 -     metrics.record_reprice(Duration::from_millis(30));
[INFO] [stdout] 259 +     metrics.record_reprice();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `arbitrage2` (test "testnet_backend_single_exchange_test") due to 16 previous errors
[INFO] [stdout] error[E0061]: this method takes 0 arguments but 2 arguments were supplied
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:283:13
[INFO] [stdout]     |
[INFO] [stdout] 283 |     metrics.log_summary("binance", "BTCUSDT");
[INFO] [stdout]     |             ^^^^^^^^^^^ ---------  --------- unexpected argument #2 of type `&'static str`
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         unexpected argument #1 of type `&'static str`
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:146:12
[INFO] [stdout]     |
[INFO] [stdout] 146 |     pub fn log_summary(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] help: remove the extra arguments
[INFO] [stdout]     |
[INFO] [stdout] 283 -     metrics.log_summary("binance", "BTCUSDT");
[INFO] [stdout] 283 +     metrics.log_summary();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `total_reprice_time` on type `HedgeTimingMetrics`
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:287:24
[INFO] [stdout]     |
[INFO] [stdout] 287 |     assert_eq!(metrics.total_reprice_time.as_millis(), 55);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `fill_detected_at`, `other_leg_check_at`, `cancel_initiated_at`, `cancel_completed_at`, `market_order_initiated_at` ... and 9 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 0 arguments but 1 argument was supplied
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:299:13
[INFO] [stdout]     |
[INFO] [stdout] 299 |     metrics.record_reprice(Duration::from_millis(20));
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ ------------------------- unexpected argument of type `Duration`
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  71 |     pub fn record_reprice(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] help: remove the extra argument
[INFO] [stdout]     |
[INFO] [stdout] 299 -     metrics.record_reprice(Duration::from_millis(20));
[INFO] [stdout] 299 +     metrics.record_reprice();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 0 arguments but 1 argument was supplied
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:300:13
[INFO] [stdout]     |
[INFO] [stdout] 300 |     metrics.record_reprice(Duration::from_millis(15));
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ ------------------------- unexpected argument of type `Duration`
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  71 |     pub fn record_reprice(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] help: remove the extra argument
[INFO] [stdout]     |
[INFO] [stdout] 300 -     metrics.record_reprice(Duration::from_millis(15));
[INFO] [stdout] 300 +     metrics.record_reprice();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `total_reprice_time` on type `HedgeTimingMetrics`
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:316:24
[INFO] [stdout]     |
[INFO] [stdout] 316 |     assert_eq!(metrics.total_reprice_time.as_millis(), 35);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `fill_detected_at`, `other_leg_check_at`, `cancel_initiated_at`, `cancel_completed_at`, `market_order_initiated_at` ... and 9 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `arbitrage2::strategy::atomic_execution::OrderStatusChecker`
[INFO] [stdout]  --> tests/order_status_checker_test.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use arbitrage2::strategy::atomic_execution::OrderStatusChecker;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no `OrderStatusChecker` in `strategy::atomic_execution`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `arbitrage2` (lib test) due to 1 previous error; 8 warnings emitted
[INFO] [stdout] error[E0061]: this method takes 0 arguments but 1 argument was supplied
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:336:15
[INFO] [stdout]     |
[INFO] [stdout] 336 |             m.record_reprice(Duration::from_millis(10 * (i + 1)));
[INFO] [stdout]     |               ^^^^^^^^^^^^^^ ----------------------------------- unexpected argument of type `Duration`
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  71 |     pub fn record_reprice(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] help: remove the extra argument
[INFO] [stdout]     |
[INFO] [stdout] 336 -             m.record_reprice(Duration::from_millis(10 * (i + 1)));
[INFO] [stdout] 336 +             m.record_reprice();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `total_reprice_time` on type `std::sync::MutexGuard<'_, HedgeTimingMetrics>`
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:349:30
[INFO] [stdout]     |
[INFO] [stdout] 349 |     assert_eq!(final_metrics.total_reprice_time.as_millis(), 150);
[INFO] [stdout]     |                              ^^^^^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `fill_detected_at`, `other_leg_check_at`, `cancel_initiated_at`, `cancel_completed_at`, `market_order_initiated_at` ... and 9 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `total_reprice_time` on type `HedgeTimingMetrics`
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:372:24
[INFO] [stdout]     |
[INFO] [stdout] 372 |     assert_eq!(metrics.total_reprice_time.as_secs(), 0);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `fill_detected_at`, `other_leg_check_at`, `cancel_initiated_at`, `cancel_completed_at`, `market_order_initiated_at` ... and 9 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `last_measurement` is never read
[INFO] [stdout]    --> src/bin/monitor.rs:234:5
[INFO] [stdout]     |
[INFO] [stdout] 223 | struct AllocationMetrics {
[INFO] [stdout]     |        ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 234 |     last_measurement: Option<Instant>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `AllocationMetrics` has a derived impl for the trait `Clone`, 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] error[E0061]: this method takes 0 arguments but 1 argument was supplied
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:380:13
[INFO] [stdout]     |
[INFO] [stdout] 380 |     metrics.record_reprice(Duration::from_millis(42));
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ ------------------------- unexpected argument of type `Duration`
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  71 |     pub fn record_reprice(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] help: remove the extra argument
[INFO] [stdout]     |
[INFO] [stdout] 380 -     metrics.record_reprice(Duration::from_millis(42));
[INFO] [stdout] 380 +     metrics.record_reprice();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `total_reprice_time` on type `HedgeTimingMetrics`
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:397:24
[INFO] [stdout]     |
[INFO] [stdout] 397 |     assert_eq!(metrics.total_reprice_time.as_millis(), 42);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `fill_detected_at`, `other_leg_check_at`, `cancel_initiated_at`, `cancel_completed_at`, `market_order_initiated_at` ... and 9 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0532]: expected tuple struct or tuple variant, found unit variant `CancellationResult::AlreadyFilled`
[INFO] [stdout]    --> tests/order_status_checker_test.rs:473:9
[INFO] [stdout]     |
[INFO] [stdout] 473 |         CancellationResult::AlreadyFilled(qty) => {
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this syntax instead: `CancellationResult::AlreadyFilled`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/strategy/atomic_execution.rs:320:5
[INFO] [stdout]     |
[INFO] [stdout] 320 |     AlreadyFilled,
[INFO] [stdout]     |     ------------- `CancellationResult::AlreadyFilled` defined here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0532]: expected tuple struct or tuple variant, found unit variant `CancellationResult::AlreadyFilled`
[INFO] [stdout]    --> tests/order_status_checker_test.rs:489:9
[INFO] [stdout]     |
[INFO] [stdout] 489 |         CancellationResult::AlreadyFilled(qty) => {
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this syntax instead: `CancellationResult::AlreadyFilled`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/strategy/atomic_execution.rs:320:5
[INFO] [stdout]     |
[INFO] [stdout] 320 |     AlreadyFilled,
[INFO] [stdout]     |     ------------- `CancellationResult::AlreadyFilled` defined here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0532]: expected tuple struct or tuple variant, found unit variant `CancellationResult::AlreadyFilled`
[INFO] [stdout]    --> tests/order_status_checker_test.rs:589:33
[INFO] [stdout]     |
[INFO] [stdout] 589 |     assert!(matches!(result, Ok(CancellationResult::AlreadyFilled(_))));
[INFO] [stdout]     |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this syntax instead: `CancellationResult::AlreadyFilled`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/strategy/atomic_execution.rs:320:5
[INFO] [stdout]     |
[INFO] [stdout] 320 |     AlreadyFilled,
[INFO] [stdout]     |     ------------- `CancellationResult::AlreadyFilled` defined here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0532]: expected tuple struct or tuple variant, found unit variant `CancellationResult::AlreadyFilled`
[INFO] [stdout]    --> tests/order_status_checker_test.rs:597:33
[INFO] [stdout]     |
[INFO] [stdout] 597 |     assert!(matches!(result, Ok(CancellationResult::AlreadyFilled(_))));
[INFO] [stdout]     |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this syntax instead: `CancellationResult::AlreadyFilled`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/strategy/atomic_execution.rs:320:5
[INFO] [stdout]     |
[INFO] [stdout] 320 |     AlreadyFilled,
[INFO] [stdout]     |     ------------- `CancellationResult::AlreadyFilled` defined here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0532]: expected tuple struct or tuple variant, found unit variant `CancellationResult::AlreadyFilled`
[INFO] [stdout]    --> tests/order_status_checker_test.rs:677:33
[INFO] [stdout]     |
[INFO] [stdout] 677 |     assert!(matches!(result, Ok(CancellationResult::AlreadyFilled(_))));
[INFO] [stdout]     |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this syntax instead: `CancellationResult::AlreadyFilled`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/strategy/atomic_execution.rs:320:5
[INFO] [stdout]     |
[INFO] [stdout] 320 |     AlreadyFilled,
[INFO] [stdout]     |     ------------- `CancellationResult::AlreadyFilled` defined here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0532]: expected tuple struct or tuple variant, found unit variant `CancellationResult::AlreadyFilled`
[INFO] [stdout]    --> tests/order_status_checker_test.rs:685:33
[INFO] [stdout]     |
[INFO] [stdout] 685 |     assert!(matches!(result, Ok(CancellationResult::AlreadyFilled(_))));
[INFO] [stdout]     |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this syntax instead: `CancellationResult::AlreadyFilled`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/strategy/atomic_execution.rs:320:5
[INFO] [stdout]     |
[INFO] [stdout] 320 |     AlreadyFilled,
[INFO] [stdout]     |     ------------- `CancellationResult::AlreadyFilled` defined here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:405:60
[INFO] [stdout]     |
[INFO] [stdout] 405 |     metrics.record_api_response("depth_check".to_string(), 15);
[INFO] [stdout]     |             -------------------                            ^^ expected `Duration`, found integer
[INFO] [stdout]     |             |
[INFO] [stdout]     |             arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:80:12
[INFO] [stdout]     |
[INFO] [stdout]  80 |     pub fn record_api_response(&mut self, endpoint: String, duration: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:406:61
[INFO] [stdout]     |
[INFO] [stdout] 406 |     metrics.record_api_response("cancel_order".to_string(), 25);
[INFO] [stdout]     |             -------------------                             ^^ expected `Duration`, found integer
[INFO] [stdout]     |             |
[INFO] [stdout]     |             arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:80:12
[INFO] [stdout]     |
[INFO] [stdout]  80 |     pub fn record_api_response(&mut self, endpoint: String, duration: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0046]: not all trait items implemented, missing: `get_best_ask`, `get_quantity_step`
[INFO] [stdout]    --> tests/order_status_checker_test.rs:184:1
[INFO] [stdout]     |
[INFO] [stdout] 184 | impl ExecutionBackend for MockCancelSuccessBackend {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `get_best_ask`, `get_quantity_step` in implementation
[INFO] [stdout]     |
[INFO] [stdout]     = help: implement the missing item: `fn get_best_ask<'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 str, _: &'life2 str) -> Pin<Box<(dyn Future<Output = Result<f64, Box<(dyn std::error::Error + Send + Sync + 'static)>>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]     = help: implement the missing item: `fn get_quantity_step<'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 str, _: &'life2 str) -> Pin<Box<(dyn Future<Output = Result<f64, Box<(dyn std::error::Error + Send + Sync + 'static)>>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0046]: not all trait items implemented, missing: `get_best_ask`, `get_quantity_step`
[INFO] [stdout]    --> tests/order_status_checker_test.rs:251:1
[INFO] [stdout]     |
[INFO] [stdout] 251 | impl ExecutionBackend for MockBinanceAlreadyFilledBackend {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `get_best_ask`, `get_quantity_step` in implementation
[INFO] [stdout]     |
[INFO] [stdout]     = help: implement the missing item: `fn get_best_ask<'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 str, _: &'life2 str) -> Pin<Box<(dyn Future<Output = Result<f64, Box<(dyn std::error::Error + Send + Sync + 'static)>>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]     = help: implement the missing item: `fn get_quantity_step<'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 str, _: &'life2 str) -> Pin<Box<(dyn Future<Output = Result<f64, Box<(dyn std::error::Error + Send + Sync + 'static)>>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0046]: not all trait items implemented, missing: `get_best_ask`, `get_quantity_step`
[INFO] [stdout]    --> tests/order_status_checker_test.rs:318:1
[INFO] [stdout]     |
[INFO] [stdout] 318 | impl ExecutionBackend for MockBybitAlreadyFilledBackend {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `get_best_ask`, `get_quantity_step` in implementation
[INFO] [stdout]     |
[INFO] [stdout]     = help: implement the missing item: `fn get_best_ask<'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 str, _: &'life2 str) -> Pin<Box<(dyn Future<Output = Result<f64, Box<(dyn std::error::Error + Send + Sync + 'static)>>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]     = help: implement the missing item: `fn get_quantity_step<'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 str, _: &'life2 str) -> Pin<Box<(dyn Future<Output = Result<f64, Box<(dyn std::error::Error + Send + Sync + 'static)>>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0046]: not all trait items implemented, missing: `get_best_ask`, `get_quantity_step`
[INFO] [stdout]    --> tests/order_status_checker_test.rs:385:1
[INFO] [stdout]     |
[INFO] [stdout] 385 | impl ExecutionBackend for MockCancelFailureBackend {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `get_best_ask`, `get_quantity_step` in implementation
[INFO] [stdout]     |
[INFO] [stdout]     = help: implement the missing item: `fn get_best_ask<'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 str, _: &'life2 str) -> Pin<Box<(dyn Future<Output = Result<f64, Box<(dyn std::error::Error + Send + Sync + 'static)>>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]     = help: implement the missing item: `fn get_quantity_step<'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 str, _: &'life2 str) -> Pin<Box<(dyn Future<Output = Result<f64, Box<(dyn std::error::Error + Send + Sync + 'static)>>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0046]: not all trait items implemented, missing: `get_best_ask`, `get_quantity_step`
[INFO] [stdout]    --> tests/order_status_checker_test.rs:520:5
[INFO] [stdout]     |
[INFO] [stdout] 520 |     impl ExecutionBackend for MockBinanceErrorBackend {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `get_best_ask`, `get_quantity_step` in implementation
[INFO] [stdout]     |
[INFO] [stdout]     = help: implement the missing item: `fn get_best_ask<'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 str, _: &'life2 str) -> Pin<Box<(dyn Future<Output = Result<f64, Box<(dyn std::error::Error + Send + Sync + 'static)>>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]     = help: implement the missing item: `fn get_quantity_step<'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 str, _: &'life2 str) -> Pin<Box<(dyn Future<Output = Result<f64, Box<(dyn std::error::Error + Send + Sync + 'static)>>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0046]: not all trait items implemented, missing: `get_best_ask`, `get_quantity_step`
[INFO] [stdout]    --> tests/order_status_checker_test.rs:608:5
[INFO] [stdout]     |
[INFO] [stdout] 608 |     impl ExecutionBackend for MockBybitErrorBackend {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `get_best_ask`, `get_quantity_step` in implementation
[INFO] [stdout]     |
[INFO] [stdout]     = help: implement the missing item: `fn get_best_ask<'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 str, _: &'life2 str) -> Pin<Box<(dyn Future<Output = Result<f64, Box<(dyn std::error::Error + Send + Sync + 'static)>>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]     = help: implement the missing item: `fn get_quantity_step<'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 str, _: &'life2 str) -> Pin<Box<(dyn Future<Output = Result<f64, Box<(dyn std::error::Error + Send + Sync + 'static)>>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:407:60
[INFO] [stdout]     |
[INFO] [stdout] 407 |     metrics.record_api_response("place_order".to_string(), 30);
[INFO] [stdout]     |             -------------------                            ^^ expected `Duration`, found integer
[INFO] [stdout]     |             |
[INFO] [stdout]     |             arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:80:12
[INFO] [stdout]     |
[INFO] [stdout]  80 |     pub fn record_api_response(&mut self, endpoint: String, duration: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 0 arguments but 1 argument was supplied
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:414:13
[INFO] [stdout]     |
[INFO] [stdout] 414 |     metrics.record_reprice(Duration::from_millis(20));
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ ------------------------- unexpected argument of type `Duration`
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  71 |     pub fn record_reprice(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] help: remove the extra argument
[INFO] [stdout]     |
[INFO] [stdout] 414 -     metrics.record_reprice(Duration::from_millis(20));
[INFO] [stdout] 414 +     metrics.record_reprice();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:419:49
[INFO] [stdout]     |
[INFO] [stdout] 419 |     assert_eq!(metrics.api_response_times[0].1, 15);
[INFO] [stdout]     |                                                 ^^ expected `Duration`, found integer
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `total_reprice_time` on type `HedgeTimingMetrics`
[INFO] [stdout]    --> tests/hedge_timing_metrics_test.rs:423:24
[INFO] [stdout]     |
[INFO] [stdout] 423 |     assert_eq!(metrics.total_reprice_time.as_millis(), 20);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `fill_detected_at`, `other_leg_check_at`, `cancel_initiated_at`, `cancel_completed_at`, `market_order_initiated_at` ... and 9 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0061, E0308, E0609.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0061`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `arbitrage2` (test "hedge_timing_metrics_test") due to 26 previous errors
[INFO] [stdout] warning: unused import: `redis::aio::MultiplexedConnection`
[INFO] [stdout]   --> src/strategy/opportunity_detector.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | use redis::aio::MultiplexedConnection;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0046, E0432, E0532.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0046`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `arbitrage2` (test "order_status_checker_test") due to 13 previous errors
[INFO] [stdout] warning: unused import: `redis::AsyncCommands`
[INFO] [stdout]   --> src/strategy/opportunity_detector.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | use redis::AsyncCommands;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `target_quantity`
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:444:9
[INFO] [stdout]     |
[INFO] [stdout] 444 |         target_quantity: f64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_quantity`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `api_duration`
[INFO] [stdout]    --> src/strategy/entry.rs:848:29
[INFO] [stdout]     |
[INFO] [stdout] 848 |                         let api_duration = api_start.elapsed().as_millis();
[INFO] [stdout]     |                             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_api_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `long_filled` is never read
[INFO] [stdout]     --> src/strategy/entry.rs:2033:45
[INFO] [stdout]      |
[INFO] [stdout] 2033 | ...                   long_filled = true;
[INFO] [stdout]      |                       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout]      = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `short_filled` is never read
[INFO] [stdout]     --> src/strategy/entry.rs:1775:45
[INFO] [stdout]      |
[INFO] [stdout] 1775 | ...                   short_filled = true;
[INFO] [stdout]      |                       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `symbol`
[INFO] [stdout]   --> src/strategy/testnet_backend.rs:71:62
[INFO] [stdout]    |
[INFO] [stdout] 71 |     async fn set_margin_type_isolated(&self, exchange: &str, symbol: &str) -> Result<(), Box<dyn Error + Send + Sync>> {
[INFO] [stdout]    |                                                              ^^^^^^ help: if this is intentional, prefix it with an underscore: `_symbol`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BINANCE_USDM_BASE_URL` is never used
[INFO] [stdout]   --> src/binance.rs:12:7
[INFO] [stdout]    |
[INFO] [stdout] 12 | const BINANCE_USDM_BASE_URL: &str = "https://fapi.binance.com";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BINANCE_USDM_WS_BASE_URL` is never used
[INFO] [stdout]   --> src/binance.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | const BINANCE_USDM_WS_BASE_URL: &str = "wss://fstream.binance.com/ws";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STREAMS_PER_CONNECTION` is never used
[INFO] [stdout]   --> src/binance.rs:36:7
[INFO] [stdout]    |
[INFO] [stdout] 36 | const STREAMS_PER_CONNECTION: usize = 100;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_WORKERS` is never used
[INFO] [stdout]   --> src/binance.rs:37:7
[INFO] [stdout]    |
[INFO] [stdout] 37 | const MAX_WORKERS: usize = 999; // No limit - spawn as many workers as needed
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BinanceUsdmConnector` is never constructed
[INFO] [stdout]   --> src/binance.rs:39:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub struct BinanceUsdmConnector;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `connection_check` and `run` are never used
[INFO] [stdout]   --> src/binance.rs:42:14
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl BinanceUsdmConnector {
[INFO] [stdout]    | ------------------------- associated functions in this implementation
[INFO] [stdout] 42 |     async fn connection_check(client: &reqwest::Client) -> Result<(), DynError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub async fn run(
[INFO] [stdout]    |                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExchangeInfo` is never constructed
[INFO] [stdout]   --> src/binance.rs:84:8
[INFO] [stdout]    |
[INFO] [stdout] 84 | struct ExchangeInfo {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExchangeSymbol` is never constructed
[INFO] [stdout]   --> src/binance.rs:89:8
[INFO] [stdout]    |
[INFO] [stdout] 89 | struct ExchangeSymbol {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fetch_valid_usdt_perp_symbols` is never used
[INFO] [stdout]   --> src/binance.rs:98:10
[INFO] [stdout]    |
[INFO] [stdout] 98 | async fn fetch_valid_usdt_perp_symbols(client: &reqwest::Client) -> Result<Vec<String>, DynError> {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_streams` is never used
[INFO] [stdout]    --> src/binance.rs:116:4
[INFO] [stdout]     |
[INFO] [stdout] 116 | fn build_streams(symbols: &[String]) -> Vec<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `redis_key_for` is never used
[INFO] [stdout]    --> src/binance.rs:126:4
[INFO] [stdout]     |
[INFO] [stdout] 126 | fn redis_key_for(stream_name: &str, symbol: &str) -> Option<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ws_batch` is never used
[INFO] [stdout]    --> src/binance.rs:136:10
[INFO] [stdout]     |
[INFO] [stdout] 136 | async fn run_ws_batch(
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ws_worker` is never used
[INFO] [stdout]    --> src/binance.rs:328:10
[INFO] [stdout]     |
[INFO] [stdout] 328 | async fn run_ws_worker(
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_plain_usdt_symbol` is never used
[INFO] [stdout]    --> src/binance.rs:384:4
[INFO] [stdout]     |
[INFO] [stdout] 384 | fn is_plain_usdt_symbol(symbol: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `spread_bps` and `mid_price` are never used
[INFO] [stdout]   --> src/strategy/types.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl MarketUpdate {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn spread_bps(&self) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn mid_price(&self) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `ID_TO_SYMBOL` is never used
[INFO] [stdout]   --> src/strategy/types.rs:94:8
[INFO] [stdout]    |
[INFO] [stdout] 94 | static ID_TO_SYMBOL: Lazy<Vec<&'static str>> = Lazy::new(|| {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `id_to_symbol` is never used
[INFO] [stdout]    --> src/strategy/types.rs:118:8
[INFO] [stdout]     |
[INFO] [stdout] 118 | pub fn id_to_symbol(id: u32) -> Option<&'static str> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `register_symbol` is never used
[INFO] [stdout]    --> src/strategy/types.rs:123:8
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub fn register_symbol(symbol: String, id: u32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Pending` is never constructed
[INFO] [stdout]    --> src/strategy/types.rs:141:12
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub struct Pending;
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Filled` is never constructed
[INFO] [stdout]    --> src/strategy/types.rs:149:12
[INFO] [stdout]     |
[INFO] [stdout] 149 | pub struct Filled {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Cancelled` is never constructed
[INFO] [stdout]    --> src/strategy/types.rs:160:12
[INFO] [stdout]     |
[INFO] [stdout] 160 | pub struct Cancelled {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Order` is never constructed
[INFO] [stdout]    --> src/strategy/types.rs:181:12
[INFO] [stdout]     |
[INFO] [stdout] 181 | pub struct Order<S> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `fill`, and `cancel` are never used
[INFO] [stdout]    --> src/strategy/types.rs:194:12
[INFO] [stdout]     |
[INFO] [stdout] 189 | impl Order<Pending> {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub fn new(id: u64, symbol_id: u32, price: f64, size: f64) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn fill(self, _fill_price: f64, _fill_time: u64) -> Order<Filled> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     pub fn cancel(self, _reason: &'static str) -> Order<Cancelled> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_fill_price`, `id`, `symbol_id`, and `size` are never used
[INFO] [stdout]    --> src/strategy/types.rs:247:12
[INFO] [stdout]     |
[INFO] [stdout] 239 | impl Order<Filled> {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 247 |     pub fn get_fill_price(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 253 |     pub fn id(&self) -> u64 {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn symbol_id(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn size(&self) -> f64 {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_reason`, `id`, and `symbol_id` are never used
[INFO] [stdout]    --> src/strategy/types.rs:275:12
[INFO] [stdout]     |
[INFO] [stdout] 270 | impl Order<Cancelled> {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 275 |     pub fn get_reason(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 281 |     pub fn id(&self) -> u64 {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     pub fn symbol_id(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `id`, `symbol_id`, `price`, and `size` are never used
[INFO] [stdout]    --> src/strategy/types.rs:295:12
[INFO] [stdout]     |
[INFO] [stdout] 292 | impl Order<Pending> {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 295 |     pub fn id(&self) -> u64 {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 301 |     pub fn symbol_id(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     pub fn price(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 313 |     pub fn size(&self) -> f64 {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `passes_all` is never used
[INFO] [stdout]    --> src/strategy/types.rs:331:12
[INFO] [stdout]     |
[INFO] [stdout] 330 | impl HardConstraints {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] 331 |     pub fn passes_all(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `calculate_confidence_score` is never used
[INFO] [stdout]    --> src/strategy/types.rs:351:12
[INFO] [stdout]     |
[INFO] [stdout] 350 | impl ConfluenceMetrics {
[INFO] [stdout]     | ---------------------- method in this implementation
[INFO] [stdout] 351 |     pub fn calculate_confidence_score(&self) -> u8 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OrderRequest` is never constructed
[INFO] [stdout]    --> src/strategy/types.rs:420:12
[INFO] [stdout]     |
[INFO] [stdout] 420 | pub struct OrderRequest {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `market`, `limit`, `is_market`, `is_limit`, `is_buy`, and `is_sell` are never used
[INFO] [stdout]    --> src/strategy/types.rs:469:12
[INFO] [stdout]     |
[INFO] [stdout] 452 | impl OrderRequest {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 469 |     pub fn market(
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 508 |     pub fn limit(
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 533 |     pub fn is_market(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 539 |     pub fn is_limit(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 545 |     pub fn is_buy(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     pub fn is_sell(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `serialize_to_json` is never used
[INFO] [stdout]    --> src/strategy/types.rs:832:8
[INFO] [stdout]     |
[INFO] [stdout] 832 | pub fn serialize_to_json<T: Serialize>(value: &T) -> Result<String, serde_json::Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RepricingEvent` is never constructed
[INFO] [stdout]    --> src/strategy/types.rs:866:12
[INFO] [stdout]     |
[INFO] [stdout] 866 | pub struct RepricingEvent {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RepricingMetrics` is never constructed
[INFO] [stdout]    --> src/strategy/types.rs:878:12
[INFO] [stdout]     |
[INFO] [stdout] 878 | pub struct RepricingMetrics {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `finalize` are never used
[INFO] [stdout]    --> src/strategy/types.rs:889:12
[INFO] [stdout]     |
[INFO] [stdout] 888 | impl RepricingMetrics {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 889 |     pub fn new(initial_price: f64) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 901 |     pub fn finalize(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RepricingConfig` is never constructed
[INFO] [stdout]    --> src/strategy/types.rs:909:12
[INFO] [stdout]     |
[INFO] [stdout] 909 | pub struct RepricingConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ExecutionMode` is never used
[INFO] [stdout]    --> src/strategy/types.rs:920:10
[INFO] [stdout]     |
[INFO] [stdout] 920 | pub enum ExecutionMode {
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `ultra_fast`, `balanced`, `safe`, and `from_confidence` are never used
[INFO] [stdout]    --> src/strategy/types.rs:927:12
[INFO] [stdout]     |
[INFO] [stdout] 926 | impl RepricingConfig {
[INFO] [stdout]     | -------------------- associated functions in this implementation
[INFO] [stdout] 927 |     pub fn ultra_fast() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 938 |     pub fn balanced() -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 949 |     pub fn safe() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 964 |     pub fn from_confidence(confidence_score: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/strategy/market_data.rs:173:12
[INFO] [stdout]     |
[INFO] [stdout]  83 | impl MarketDataStore {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn prefetch_symbol(&self, symbol_id: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 275 |     pub fn get_spread_bps(&self, symbol_id: u32) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 323 |     pub fn get_timestamp(&self, symbol_id: u32) -> Option<u64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 338 |     pub fn get_mid_price(&self, symbol_id: u32) -> Option<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 363 |     pub fn is_stale(&self, symbol_id: u32, current_time_us: u64, threshold_us: u64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 396 |     pub fn iter_spreads(&self) -> impl Iterator<Item = (u32, f64)> + '_ {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 459 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 465 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 473 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BufferPool` is never constructed
[INFO] [stdout]   --> src/strategy/buffer_pool.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct BufferPool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `buffer_count`, `buffer_capacity`, `get_string_buffer`, `create_small_vec`, and `create_small_vec_with_capacity` are never used
[INFO] [stdout]   --> src/strategy/buffer_pool.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl BufferPool {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn buffer_count(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn buffer_capacity(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn get_string_buffer(&mut self) -> &mut String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn create_small_vec<T>() -> SmallVec<[T; 8]> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn create_small_vec_with_capacity<T>(capacity: usize) -> SmallVec<[T; 8]> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `with_string_buffer` is never used
[INFO] [stdout]    --> src/strategy/buffer_pool.rs:124:8
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub fn with_string_buffer<F, R>(f: F) -> R
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_small_vec` is never used
[INFO] [stdout]    --> src/strategy/buffer_pool.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn create_small_vec<T>() -> SmallVec<[T; 8]> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `with_capacity`, `depth`, `is_full`, `is_empty`, and `metrics` are never used
[INFO] [stdout]    --> src/strategy/pipeline.rs:118:12
[INFO] [stdout]     |
[INFO] [stdout]  83 | impl MarketPipeline {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn with_capacity(capacity: usize) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn depth(&self) -> usize {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub fn is_full(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn metrics(&self) -> PipelineMetrics {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `try_push` is never used
[INFO] [stdout]    --> src/strategy/pipeline.rs:289:12
[INFO] [stdout]     |
[INFO] [stdout] 226 | impl MarketProducer {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn try_push(&self, update: MarketUpdate) -> Result<(), MarketUpdate> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `pop_batch` is never used
[INFO] [stdout]    --> src/strategy/pipeline.rs:374:12
[INFO] [stdout]     |
[INFO] [stdout] 319 | impl MarketConsumer {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 374 |     pub fn pop_batch(&self, max_batch: usize) -> Vec<MarketUpdate> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PipelineMetrics` is never constructed
[INFO] [stdout]    --> src/strategy/pipeline.rs:390:12
[INFO] [stdout]     |
[INFO] [stdout] 390 | pub struct PipelineMetrics {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `drop_rate`, `utilization`, and `is_backpressure` are never used
[INFO] [stdout]    --> src/strategy/pipeline.rs:412:12
[INFO] [stdout]     |
[INFO] [stdout] 410 | impl PipelineMetrics {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] 411 |     /// Calculate the drop rate (percentage of updates dropped).
[INFO] [stdout] 412 |     pub fn drop_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 421 |     pub fn utilization(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 430 |     pub fn is_backpressure(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ORDER_QUEUE_CAPACITY` is never used
[INFO] [stdout]    --> src/strategy/pipeline.rs:635:7
[INFO] [stdout]     |
[INFO] [stdout] 635 | const ORDER_QUEUE_CAPACITY: usize = 1_000;
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExecutionPipeline` is never constructed
[INFO] [stdout]    --> src/strategy/pipeline.rs:668:12
[INFO] [stdout]     |
[INFO] [stdout] 668 | pub struct ExecutionPipeline {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/strategy/pipeline.rs:699:12
[INFO] [stdout]     |
[INFO] [stdout] 689 | impl ExecutionPipeline {
[INFO] [stdout]     | ---------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 699 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 724 |     pub fn with_capacity(capacity: usize) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 742 |     pub fn producer(&self) -> OrderProducer {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 755 |     pub fn consumer(&self) -> OrderConsumer {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 771 |     pub fn depth(&self) -> usize {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 777 |     pub fn capacity(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 783 |     pub fn is_full(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 789 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 796 |     pub fn metrics(&self) -> ExecutionMetrics {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OrderProducer` is never constructed
[INFO] [stdout]    --> src/strategy/pipeline.rs:819:12
[INFO] [stdout]     |
[INFO] [stdout] 819 | pub struct OrderProducer {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `submit` and `try_submit` are never used
[INFO] [stdout]    --> src/strategy/pipeline.rs:853:12
[INFO] [stdout]     |
[INFO] [stdout] 830 | impl OrderProducer {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 853 |     pub fn submit(&self, order: OrderRequest) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 893 |     pub fn try_submit(
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OrderConsumer` is never constructed
[INFO] [stdout]    --> src/strategy/pipeline.rs:917:12
[INFO] [stdout]     |
[INFO] [stdout] 917 | pub struct OrderConsumer {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `pop` and `pop_batch` are never used
[INFO] [stdout]    --> src/strategy/pipeline.rs:945:12
[INFO] [stdout]     |
[INFO] [stdout] 926 | impl OrderConsumer {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 945 |     pub fn pop(&self) -> Option<OrderRequest> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 981 |     pub fn pop_batch(&self, max_batch: usize) -> Vec<OrderRequest> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExecutionMetrics` is never constructed
[INFO] [stdout]    --> src/strategy/pipeline.rs:997:12
[INFO] [stdout]     |
[INFO] [stdout] 997 | pub struct ExecutionMetrics {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `drop_rate`, `utilization`, and `is_backpressure` are never used
[INFO] [stdout]     --> src/strategy/pipeline.rs:1019:12
[INFO] [stdout]      |
[INFO] [stdout] 1017 | impl ExecutionMetrics {
[INFO] [stdout]      | --------------------- methods in this implementation
[INFO] [stdout] 1018 |     /// Calculate the drop rate (percentage of orders dropped).
[INFO] [stdout] 1019 |     pub fn drop_rate(&self) -> f64 {
[INFO] [stdout]      |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1028 |     pub fn utilization(&self) -> f64 {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1037 |     pub fn is_backpressure(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_empty` is never used
[INFO] [stdout]    --> src/strategy/symbol_map.rs:165:12
[INFO] [stdout]     |
[INFO] [stdout]  53 | impl SymbolMap {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new_shared` is never used
[INFO] [stdout]    --> src/strategy/symbol_map.rs:182:12
[INFO] [stdout]     |
[INFO] [stdout] 177 | impl SymbolMap {
[INFO] [stdout]     | -------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 182 |     pub fn new_shared() -> Arc<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `push_count`, `pop_count`, `drop_count`, `len`, and `is_empty` are never used
[INFO] [stdout]    --> src/strategy/opportunity_queue.rs:83:12
[INFO] [stdout]     |
[INFO] [stdout]  33 | impl OpportunityQueue {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn push_count(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub fn pop_count(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn drop_count(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `pop_batch` is never used
[INFO] [stdout]    --> src/strategy/opportunity_queue.rs:233:12
[INFO] [stdout]     |
[INFO] [stdout] 182 | impl OpportunityConsumer {
[INFO] [stdout]     | ------------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn pop_batch(&self, max_batch: usize) -> Vec<ArbitrageOpportunity> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CoreAssignment` is never constructed
[INFO] [stdout]   --> src/strategy/thread_pinning.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct CoreAssignment {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `default_assignment` and `custom` are never used
[INFO] [stdout]   --> src/strategy/thread_pinning.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl CoreAssignment {
[INFO] [stdout]    | ------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn default_assignment() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn custom(strategy_core: usize, websocket_cores: Vec<usize>) -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `spawn_pinned_thread` is never used
[INFO] [stdout]    --> src/strategy/thread_pinning.rs:249:8
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub fn spawn_pinned_thread<F, T>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `spread_exceeds_threshold` is never used
[INFO] [stdout]   --> src/strategy/branchless.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn spread_exceeds_threshold(spread: f64, threshold: f64) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `funding_delta_substantial` is never used
[INFO] [stdout]   --> src/strategy/branchless.rs:49:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub fn funding_delta_substantial(funding_delta: f64, threshold: f64) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `depth_sufficient` is never used
[INFO] [stdout]   --> src/strategy/branchless.rs:57:8
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub fn depth_sufficient(depth: f64, threshold: f64) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `all_conditions_pass` is never used
[INFO] [stdout]   --> src/strategy/branchless.rs:81:8
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub fn all_conditions_pass(spread_ok: bool, funding_ok: bool, depth_ok: bool) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `any_condition_passes` is never used
[INFO] [stdout]   --> src/strategy/branchless.rs:95:8
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub fn any_condition_passes(cond1: bool, cond2: bool, cond3: bool) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `min_f64` is never used
[INFO] [stdout]    --> src/strategy/branchless.rs:120:8
[INFO] [stdout]     |
[INFO] [stdout] 120 | pub fn min_f64(a: f64, b: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `max_f64` is never used
[INFO] [stdout]    --> src/strategy/branchless.rs:129:8
[INFO] [stdout]     |
[INFO] [stdout] 129 | pub fn max_f64(a: f64, b: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clamp_f64` is never used
[INFO] [stdout]    --> src/strategy/branchless.rs:154:8
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub fn clamp_f64(value: f64, min: f64, max: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `select_f64` is never used
[INFO] [stdout]    --> src/strategy/branchless.rs:175:8
[INFO] [stdout]     |
[INFO] [stdout] 175 | pub fn select_f64(condition: bool, value_if_true: f64, value_if_false: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_valid_opportunity` is never used
[INFO] [stdout]    --> src/strategy/branchless.rs:202:8
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub fn is_valid_opportunity(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_exit_opportunity` is never used
[INFO] [stdout]    --> src/strategy/branchless.rs:230:8
[INFO] [stdout]     |
[INFO] [stdout] 230 | pub fn should_exit_opportunity(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `abs_f64` is never used
[INFO] [stdout]    --> src/strategy/branchless.rs:272:8
[INFO] [stdout]     |
[INFO] [stdout] 272 | pub fn abs_f64(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sign_f64` is never used
[INFO] [stdout]    --> src/strategy/branchless.rs:291:8
[INFO] [stdout]     |
[INFO] [stdout] 291 | pub fn sign_f64(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `ID_TO_EXCHANGE` is never used
[INFO] [stdout]    --> src/strategy/exchange_fees.rs:100:8
[INFO] [stdout]     |
[INFO] [stdout] 100 | static ID_TO_EXCHANGE: Lazy<Vec<&'static str>> = Lazy::new(|| {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `exchange_to_id` is never used
[INFO] [stdout]    --> src/strategy/exchange_fees.rs:192:8
[INFO] [stdout]     |
[INFO] [stdout] 192 | pub fn exchange_to_id(exchange: &str) -> u8 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `id_to_exchange` is never used
[INFO] [stdout]    --> src/strategy/exchange_fees.rs:209:8
[INFO] [stdout]     |
[INFO] [stdout] 209 | pub fn id_to_exchange(exchange_id: u8) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_exchange_ids` is never used
[INFO] [stdout]    --> src/strategy/exchange_fees.rs:219:8
[INFO] [stdout]     |
[INFO] [stdout] 219 | pub fn get_all_exchange_ids() -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_exchange_names` is never used
[INFO] [stdout]    --> src/strategy/exchange_fees.rs:235:8
[INFO] [stdout]     |
[INFO] [stdout] 235 | pub fn get_all_exchange_names() -> Vec<&'static str> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LatencyMonitor` is never constructed
[INFO] [stdout]  --> src/strategy/latency.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct LatencyMonitor {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `any_stale` are never used
[INFO] [stdout]   --> src/strategy/latency.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl LatencyMonitor {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 14 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn any_stale(&self, threshold_ms: u64) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LatencyStats` is never constructed
[INFO] [stdout]  --> src/strategy/latency_tracker.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct LatencyStats {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `record`, `snapshot`, and `reset` are never used
[INFO] [stdout]   --> src/strategy/latency_tracker.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl LatencyStats {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 27 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn record(&self, latency_ns: u64) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn snapshot(&self) -> LatencySnapshot {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 96 |     pub fn reset(&self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LatencySnapshot` is never constructed
[INFO] [stdout]    --> src/strategy/latency_tracker.rs:113:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | pub struct LatencySnapshot {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/strategy/latency_tracker.rs:122:12
[INFO] [stdout]     |
[INFO] [stdout] 121 | impl LatencySnapshot {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] 122 |     pub fn p50_us(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn p95_us(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn p99_us(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     pub fn max_us(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn p50_ms(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn p95_ms(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub fn p99_ms(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn max_ms(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `measure_latency` is never used
[INFO] [stdout]    --> src/strategy/latency_tracker.rs:157:8
[INFO] [stdout]     |
[INFO] [stdout] 157 | pub fn measure_latency<F, R>(f: F) -> (R, u64)
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `measure_and_record` is never used
[INFO] [stdout]    --> src/strategy/latency_tracker.rs:169:8
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub fn measure_and_record<F, R>(stats: &LatencyStats, f: F) -> R
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfluenceCalculator` is never constructed
[INFO] [stdout]  --> src/strategy/confluence.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ConfluenceCalculator {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/strategy/confluence.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl ConfluenceCalculator {
[INFO] [stdout]    | ------------------------- associated items in this implementation
[INFO] [stdout] 17 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn check_hard_constraints(
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn calculate_obi(bid_volume: f64, ask_volume: f64) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn calculate_vwap_deviation(current_price: f64, vwap: f64) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub fn calculate_atr(high: f64, low: f64, _close: f64, prev_close: f64) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn update_oi_history(&mut self, oi: f64) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn update_vwap_history(&mut self, price: f64, volume: f64) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn update_atr_history(&mut self, atr: f64) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn get_atr_trend(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 93 |     pub fn identify_liquidation_clusters(
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `parse_price`, `is_valid_opportunity`, `should_exit_opportunity`, `min`, `max`, and `clamp` are never used
[INFO] [stdout]    --> src/strategy/scanner.rs:14:12
[INFO] [stdout]     |
[INFO] [stdout]   5 | impl OpportunityScanner {
[INFO] [stdout]     | ----------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  14 |     pub fn parse_price(price_str: &str) -> Option<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn is_valid_opportunity(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub fn should_exit_opportunity(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     pub fn min(a: f64, b: f64) -> f64 {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn max(a: f64, b: f64) -> f64 {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn clamp(value: f64, min: f64, max: f64) -> f64 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `calculate_slippage` is never used
[INFO] [stdout]    --> src/strategy/entry.rs:345:12
[INFO] [stdout]     |
[INFO] [stdout]  79 | impl EntryExecutor {
[INFO] [stdout]     | ------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn calculate_slippage(position_size: f64, order_book_depth: f64) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `calculate_unrealized_pnl` and `check_exit_conditions` are never used
[INFO] [stdout]   --> src/strategy/positions.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout]  5 | impl PositionManager {
[INFO] [stdout]    | -------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub fn calculate_unrealized_pnl(
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn check_exit_conditions(
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_state` is never used
[INFO] [stdout]   --> src/strategy/portfolio.rs:59:18
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl PortfolioManager {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub async fn get_state(&self) -> PortfolioState {
[INFO] [stdout]    |                  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `set_market_consumer` is never used
[INFO] [stdout]   --> src/strategy/runner.rs:92:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl StrategyRunner {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 92 |     pub fn set_market_consumer(&mut self, consumer: MarketConsumer) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `reprice_count`, `first_reprice_at`, and `last_reprice_at` are never read
[INFO] [stdout]   --> src/strategy/atomic_execution.rs:25:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct HedgeTimingMetrics {
[INFO] [stdout]    |            ------------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub reprice_count: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 26 |     pub first_reprice_at: Option<Instant>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 27 |     pub last_reprice_at: Option<Instant>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HedgeTimingMetrics` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `record_reprice`, `depth_check_duration`, `total_reprice_duration`, and `log_summary` are never used
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  31 | impl HedgeTimingMetrics {
[INFO] [stdout]     | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub fn record_reprice(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn depth_check_duration(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     pub fn total_reprice_duration(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub fn log_summary(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Debug`, `Warn`, and `Error` are never constructed
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:187:5
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub enum LogLevel {
[INFO] [stdout]     |          -------- variants in this enum
[INFO] [stdout] 187 |     Debug,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 188 |     Info,
[INFO] [stdout] 189 |     Warn,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 190 |     Error,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `LogLevel` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `log_other_leg_check`, `log_cancel_completed`, `log_market_order_initiated`, `log_market_order_accepted`, and `log_error` are never used
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:199:12
[INFO] [stdout]     |
[INFO] [stdout] 198 | impl HedgeLogger {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 199 |     pub fn new(level: LogLevel) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn log_other_leg_check(&self, exchange: &str, status: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub fn log_cancel_completed(&self, exchange: &str, success: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 243 |     pub fn log_market_order_initiated(&self, exchange: &str, symbol: &str, side: &str, quantity: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |     pub fn log_market_order_accepted(&self, exchange: &str, order_id: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 306 |     pub fn log_error(&self, message: &str) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Success`, `Failed`, `AlreadyFilled`, and `NotFound` are never constructed
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:317:5
[INFO] [stdout]     |
[INFO] [stdout] 316 | pub enum CancellationResult {
[INFO] [stdout]     |          ------------------ variants in this enum
[INFO] [stdout] 317 |     Success,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 318 |     Cancelled,
[INFO] [stdout] 319 |     Failed(String),
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 320 |     AlreadyFilled,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 321 |     NotFound,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `CancellationResult` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `check_interval_ms` and `max_checks` are never read
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:349:9
[INFO] [stdout]     |
[INFO] [stdout] 348 | pub struct RaceConditionGuard {
[INFO] [stdout]     |            ------------------ fields in this struct
[INFO] [stdout] 349 |     pub check_interval_ms: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 350 |     pub max_checks: u32,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `RaceConditionGuard` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:354:12
[INFO] [stdout]     |
[INFO] [stdout] 353 | impl RaceConditionGuard {
[INFO] [stdout]     | ----------------------- associated function in this implementation
[INFO] [stdout] 354 |     pub fn new(check_interval_ms: u64, max_checks: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `long_qty` is never read
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:423:22
[INFO] [stdout]     |
[INFO] [stdout] 423 |     OnlyLongFilled { long_qty: f64 },
[INFO] [stdout]     |     --------------   ^^^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     field in this variant
[INFO] [stdout]     |
[INFO] [stdout]     = note: `BothLegsStatus` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `short_qty` is never read
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:424:23
[INFO] [stdout]     |
[INFO] [stdout] 424 |     OnlyShortFilled { short_qty: f64 },
[INFO] [stdout]     |     ---------------   ^^^^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     field in this variant
[INFO] [stdout]     |
[INFO] [stdout]     = note: `BothLegsStatus` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resume_trading` is never used
[INFO] [stdout]    --> src/strategy/atomic_execution.rs:509:8
[INFO] [stdout]     |
[INFO] [stdout] 509 | pub fn resume_trading() {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_all_balances` and `is_symbol_tradeable` are never used
[INFO] [stdout]   --> src/strategy/execution_backend.rs:33:14
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub trait ExecutionBackend: Send + Sync {
[INFO] [stdout]    |           ---------------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 33 |     async fn get_all_balances(&self) -> Result<HashMap<String, f64>, Box<dyn Error + Send + Sync>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     async fn is_symbol_tradeable(&self, exchange: &str, symbol: &str) -> Result<bool, Box<dyn Error + Send + Sync>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestnetConfig` is never constructed
[INFO] [stdout]  --> src/strategy/testnet_config.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct TestnetConfig {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExchangeCredentials` is never constructed
[INFO] [stdout]   --> src/strategy/testnet_config.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct ExchangeCredentials {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_env`, `load_exchange_creds`, `load_exchange_creds_with_passphrase`, and `has_any_configured` are never used
[INFO] [stdout]   --> src/strategy/testnet_config.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl TestnetConfig {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 21 |     pub fn from_env() -> Result<Self, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     fn load_exchange_creds(prefix: &str) -> Result<Option<ExchangeCredentials>, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     fn load_exchange_creds_with_passphrase(prefix: &str) -> Result<Option<ExchangeCredentials>, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn has_any_configured(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `HmacSha256` is never used
[INFO] [stdout]   --> src/strategy/testnet/bybit_testnet.rs:14:6
[INFO] [stdout]    |
[INFO] [stdout] 14 | type HmacSha256 = Hmac<Sha256>;
[INFO] [stdout]    |      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BYBIT_DEMO_URL` is never used
[INFO] [stdout]   --> src/strategy/testnet/bybit_testnet.rs:16:7
[INFO] [stdout]    |
[INFO] [stdout] 16 | const BYBIT_DEMO_URL: &str = "https://api-demo.bybit.com";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ORDER_BOOK_CACHE_TTL` is never used
[INFO] [stdout]   --> src/strategy/testnet/bybit_testnet.rs:19:7
[INFO] [stdout]    |
[INFO] [stdout] 19 | const ORDER_BOOK_CACHE_TTL: Duration = Duration::from_millis(100);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CachedOrderBook` is never constructed
[INFO] [stdout]   --> src/strategy/testnet/bybit_testnet.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | struct CachedOrderBook {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BybitDemoClient` is never constructed
[INFO] [stdout]   --> src/strategy/testnet/bybit_testnet.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct BybitDemoClient {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/strategy/testnet/bybit_testnet.rs:43:12
[INFO] [stdout]     |
[INFO] [stdout]  42 | impl BybitDemoClient {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  43 |     pub fn new(credentials: ExchangeCredentials) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub async fn sync_server_time(&self) -> Result<(), Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     async fn get_timestamp(&self) -> Result<String, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub async fn get_qty_step(&self, symbol: &str) -> Result<f64, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     fn generate_post_signature(&self, timestamp: &str, recv_window: &str, body: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     fn generate_get_signature(&self, timestamp: &str, recv_window: &str, query_string: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 190 |     pub async fn set_leverage(&self, symbol: &str) -> Result<(), Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 243 |     pub async fn is_symbol_tradeable(&self, symbol: &str) -> Result<bool, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 269 |     pub async fn place_market_order(&self, order: SimulatedOrder) -> Result<SimulatedOrder, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 358 |     pub async fn place_order(&self, order: SimulatedOrder) -> Result<SimulatedOrder, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 454 |     pub async fn get_order_status(&self, order_id: &str, symbol: &str) -> Result<OrderStatus, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 503 |     pub async fn get_order_status_detailed(&self, order_id: &str, symbol: &str) -> Result<crate::strategy::types::OrderStatusInfo, ...
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 574 |     pub async fn cancel_order(&self, order_id: &str, symbol: &str) -> Result<(), Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 618 |     pub async fn get_balance(&self) -> Result<f64, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 700 |     pub async fn get_order_book_depth(&self, symbol: &str, levels: usize) -> Result<crate::strategy::types::OrderBookDepth, Box<dyn...
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 824 |     pub async fn get_best_bid(&self, symbol: &str) -> Result<f64, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 839 |     pub async fn get_best_ask(&self, symbol: &str) -> Result<f64, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `HmacSha256` is never used
[INFO] [stdout]   --> src/strategy/testnet/bitget_demo.rs:10:6
[INFO] [stdout]    |
[INFO] [stdout] 10 | type HmacSha256 = Hmac<Sha256>;
[INFO] [stdout]    |      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BITGET_DEMO_URL` is never used
[INFO] [stdout]   --> src/strategy/testnet/bitget_demo.rs:12:7
[INFO] [stdout]    |
[INFO] [stdout] 12 | const BITGET_DEMO_URL: &str = "https://api.bitget.com";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BitgetDemoClient` is never constructed
[INFO] [stdout]   --> src/strategy/testnet/bitget_demo.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct BitgetDemoClient {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/strategy/testnet/bitget_demo.rs:22:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl BitgetDemoClient {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout]  22 |     pub fn new(credentials: ExchangeCredentials) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  33 |     fn generate_signature(&self, timestamp: &str, method: &str, path: &str, query_string: &str, body: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  47 |     pub async fn is_symbol_tradeable(&self, symbol: &str) -> Result<bool, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub async fn place_order(&self, order: SimulatedOrder) -> Result<SimulatedOrder, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub async fn get_order_status(&self, order_id: &str, symbol: &str) -> Result<OrderStatus, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     pub async fn cancel_order(&self, order_id: &str, symbol: &str) -> Result<(), Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 253 |     pub async fn get_balance(&self) -> Result<f64, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestnetBackend` is never constructed
[INFO] [stdout]   --> src/strategy/testnet_backend.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct TestnetBackend {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `sync_server_time` are never used
[INFO] [stdout]   --> src/strategy/testnet_backend.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl TestnetBackend {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 22 |     pub fn new(config: TestnetConfig) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub async fn sync_server_time(&self) -> Result<(), Box<dyn Error + Send + Sync>> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SyntheticConfig` is never constructed
[INFO] [stdout]  --> src/strategy/synthetic_config.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct SyntheticConfig {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_env`, `validate`, and `new` are never used
[INFO] [stdout]   --> src/strategy/synthetic_config.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl SyntheticConfig {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 19 |     /// Load configuration from environment variables with defaults
[INFO] [stdout] 20 |     pub fn from_env() -> Result<Self, Box<dyn Error + Send + Sync>> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     fn validate(&self) -> Result<(), Box<dyn Error + Send + Sync>> {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn new(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestMetricsCollector` is never constructed
[INFO] [stdout]   --> src/strategy/test_metrics.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct TestMetricsCollector {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/strategy/test_metrics.rs:55:12
[INFO] [stdout]     |
[INFO] [stdout]  53 | impl TestMetricsCollector {
[INFO] [stdout]     | ------------------------- associated items in this implementation
[INFO] [stdout]  54 |     /// Create a new test metrics collector
[INFO] [stdout]  55 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub fn record_opportunity(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn record_trade_executed(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn record_success(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn record_failure(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn record_partial_fill(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn record_cancellation(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn record_timeout(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn record_emergency_close(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub fn record_websocket_latency(&self, latency: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub fn record_queue_latency(&self, latency: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub fn record_opportunity_detection_latency(&self, latency: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn record_order_placement_latency(&self, latency: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn record_end_to_end_latency(&self, latency: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn calculate_success_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     fn calculate_percentile(sorted_values: &[Duration], percentile: f64) -> Option<Duration> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     fn calculate_latency_percentiles(latencies: &[Duration]) -> (Option<Duration>, Option<Duration>, Option<Duration>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     pub fn get_websocket_latency_percentiles(&self) -> (Option<Duration>, Option<Duration>, Option<Duration>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn get_queue_latency_percentiles(&self) -> (Option<Duration>, Option<Duration>, Option<Duration>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub fn get_opportunity_detection_percentiles(&self) -> (Option<Duration>, Option<Duration>, Option<Duration>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     pub fn get_order_placement_percentiles(&self) -> (Option<Duration>, Option<Duration>, Option<Duration>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 243 |     pub fn get_end_to_end_percentiles(&self) -> (Option<Duration>, Option<Duration>, Option<Duration>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 256 |     pub fn report_summary(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub fn report_periodic(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `exchange`, `symbol`, `available_liquidity`, `required_liquidity`, `check_duration_ms`, and `timestamp` are never read
[INFO] [stdout]   --> src/strategy/depth_checker.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct DepthCheckResult {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 11 |     pub exchange: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 12 |     pub symbol: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 13 |     pub available_liquidity: f64,  // Sum of top 5 levels
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 14 |     pub required_liquidity: f64,   // hedge_quantity * 1.5
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub check_duration_ms: u128,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     pub timestamp: u64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DepthCheckResult` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/strategy/price_chaser.rs:78:9
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub struct RepricingEvent {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 78 |     pub timestamp: u64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 79 |     pub old_price: f64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 80 |     pub new_price: f64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 81 |     pub reason: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 82 |     pub elapsed_ms: u128,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 83 |     pub exchange: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 84 |     pub side: OrderSide,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RepricingEvent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `ConfigStorage` is never used
[INFO] [stdout]   --> src/strategy/config_storage.rs:14:11
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait ConfigStorage: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `InMemoryConfigStorage` is never constructed
[INFO] [stdout]   --> src/strategy/config_storage.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct InMemoryConfigStorage {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/strategy/config_storage.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl InMemoryConfigStorage {
[INFO] [stdout]    | -------------------------- associated function in this implementation
[INFO] [stdout] 30 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfidenceThresholds` is never constructed
[INFO] [stdout]    --> src/strategy/config_storage.rs:123:8
[INFO] [stdout]     |
[INFO] [stdout] 123 | struct ConfidenceThresholds {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfigValidator` is never constructed
[INFO] [stdout]    --> src/strategy/config_storage.rs:129:12
[INFO] [stdout]     |
[INFO] [stdout] 129 | pub struct ConfigValidator;
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `validate_repricing_config` and `validate_confidence_thresholds` are never used
[INFO] [stdout]    --> src/strategy/config_storage.rs:133:12
[INFO] [stdout]     |
[INFO] [stdout] 131 | impl ConfigValidator {
[INFO] [stdout]     | -------------------- associated functions in this implementation
[INFO] [stdout] 132 |     /// Validate repricing configuration parameters
[INFO] [stdout] 133 |     pub fn validate_repricing_config(config: &RepricingConfig) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn validate_confidence_thresholds(ultra_fast: f64, balanced: f64) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `should_retry_limit` is never used
[INFO] [stdout]    --> src/strategy/fill_probability.rs:167:12
[INFO] [stdout]     |
[INFO] [stdout]  13 | impl FillProbabilityEstimator {
[INFO] [stdout]     | ----------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn should_retry_limit(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `recommended_action` is never read
[INFO] [stdout]    --> src/strategy/fill_probability.rs:199:9
[INFO] [stdout]     |
[INFO] [stdout] 195 | pub struct FillProbability {
[INFO] [stdout]     |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub recommended_action: OrderAction,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `FillProbability` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RateLimiter` is never constructed
[INFO] [stdout]  --> src/strategy/rate_limiter.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct RateLimiter {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RateLimiterState` is never constructed
[INFO] [stdout]   --> src/strategy/rate_limiter.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 13 | struct RateLimiterState {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `acquire`, and `stats` are never used
[INFO] [stdout]   --> src/strategy/rate_limiter.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl RateLimiter {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] 20 |     pub fn new(requests_per_second: u32, burst_capacity: u32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub async fn acquire(&self) {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub async fn stats(&self) -> RateLimiterStats {
[INFO] [stdout]    |                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RateLimiterStats` is never constructed
[INFO] [stdout]   --> src/strategy/rate_limiter.rs:94:12
[INFO] [stdout]    |
[INFO] [stdout] 94 | pub struct RateLimiterStats {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "8ce1645d88cd5307a32af6e53cf98363c06af45878e0db655864db9a1eb5efe6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "8ce1645d88cd5307a32af6e53cf98363c06af45878e0db655864db9a1eb5efe6", kill_on_drop: false }`
[INFO] [stdout] 8ce1645d88cd5307a32af6e53cf98363c06af45878e0db655864db9a1eb5efe6
