[INFO] cloning repository https://github.com/0xjackson/gto-cli
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/0xjackson/gto-cli" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2F0xjackson%2Fgto-cli", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2F0xjackson%2Fgto-cli'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] ce90d6c25522ca476bc31b32832bb58d9e02c043
[INFO] checking 0xjackson/gto-cli against try#0269aeccce4fd29ce9ad0ebd47a62e584d7e25ef for pr-147859
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2F0xjackson%2Fgto-cli" "/workspace/builds/worker-2-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/0xjackson/gto-cli
[INFO] finished tweaking git repo https://github.com/0xjackson/gto-cli
[INFO] tweaked toml for git repo https://github.com/0xjackson/gto-cli written to /workspace/builds/worker-2-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/0xjackson/gto-cli on toolchain 0269aeccce4fd29ce9ad0ebd47a62e584d7e25ef
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+0269aeccce4fd29ce9ad0ebd47a62e584d7e25ef" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/0xjackson/gto-cli 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" "+0269aeccce4fd29ce9ad0ebd47a62e584d7e25ef" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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" "+0269aeccce4fd29ce9ad0ebd47a62e584d7e25ef" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 4c1530abc6ef118315e3eaa39f64e5e5c791fb9810392afc561016f4c8be525c
[INFO] running `Command { std: "docker" "start" "-a" "4c1530abc6ef118315e3eaa39f64e5e5c791fb9810392afc561016f4c8be525c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "4c1530abc6ef118315e3eaa39f64e5e5c791fb9810392afc561016f4c8be525c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "4c1530abc6ef118315e3eaa39f64e5e5c791fb9810392afc561016f4c8be525c", kill_on_drop: false }`
[INFO] [stdout] 4c1530abc6ef118315e3eaa39f64e5e5c791fb9810392afc561016f4c8be525c
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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" "+0269aeccce4fd29ce9ad0ebd47a62e584d7e25ef" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 4ba2141f23449d19ef1b091e23202ab20b67647f9b47a72926bd19510b53c4b5
[INFO] running `Command { std: "docker" "start" "-a" "4ba2141f23449d19ef1b091e23202ab20b67647f9b47a72926bd19510b53c4b5", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling unicode-ident v1.0.23
[INFO] [stderr]    Compiling libc v0.2.181
[INFO] [stderr]    Compiling quote v1.0.44
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling zerocopy v0.8.39
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]     Checking anstyle-parse v0.2.7
[INFO] [stderr]     Checking colorchoice v1.0.4
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]     Checking anstyle v1.0.13
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]     Checking linux-raw-sys v0.4.15
[INFO] [stderr]     Checking is_terminal_polyfill v1.70.2
[INFO] [stderr]     Checking anstyle-query v1.1.5
[INFO] [stderr]    Compiling zmij v1.0.20
[INFO] [stderr]     Checking bitflags v2.10.0
[INFO] [stderr]     Checking crossbeam-epoch v0.9.18
[INFO] [stderr]     Checking anstream v0.6.21
[INFO] [stderr]     Checking crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling syn v2.0.114
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]     Checking clap_lex v0.7.7
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]     Checking clap_builder v4.5.57
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking unicode-segmentation v1.12.0
[INFO] [stderr]     Checking crossterm v0.28.1
[INFO] [stderr]     Checking memchr v2.8.0
[INFO] [stderr]     Checking unicode-width v0.2.2
[INFO] [stderr]     Checking rayon v1.11.0
[INFO] [stderr]     Checking comfy-table v7.1.4
[INFO] [stderr]     Checking itertools v0.13.0
[INFO] [stderr]     Checking approx v0.5.1
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling clap_derive v4.5.55
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking clap v4.5.57
[INFO] [stderr]     Checking bincode v1.3.3
[INFO] [stderr]     Checking gto-cli v1.0.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Rank`
[INFO] [stdout]  --> src/card_encoding.rs:7:26
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::cards::{Card, Rank, Suit, ALL_RANKS, ALL_SUITS};
[INFO] [stdout]   |                          ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `break_even_pct` and `spr as calc_spr`
[INFO] [stdout]   --> src/play.rs:10:26
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::math_engine::{break_even_pct, spr as calc_spr, SprZone};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::multiway::multiway_range_adjustment`
[INFO] [stdout]   --> src/play.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::multiway::multiway_range_adjustment;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get_rfi_pct`
[INFO] [stdout]   --> src/play.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     get_rfi_pct, get_rfi_range, preflop_action, positions_for,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HAND_RANKING`
[INFO] [stdout]   --> src/play.rs:17:58
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::ranges::{blockers_remove, range_from_top_pct, HAND_RANKING};
[INFO] [stdout]    |                                                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `detect_street`
[INFO] [stdout]   --> src/play.rs:19:22
[INFO] [stdout]    |
[INFO] [stdout] 19 |     default_villain, detect_street, format_strategy, StrategyEngine, StrategySource,
[INFO] [stdout]    |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `break_even_pct` and `spr as calc_spr`
[INFO] [stdout]   --> src/play.rs:10:26
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::math_engine::{break_even_pct, spr as calc_spr, SprZone};
[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: `crate::multiway::multiway_range_adjustment`
[INFO] [stdout]   --> src/play.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::multiway::multiway_range_adjustment;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get_rfi_pct`
[INFO] [stdout]   --> src/play.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     get_rfi_pct, get_rfi_range, preflop_action, positions_for,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HAND_RANKING`
[INFO] [stdout]   --> src/play.rs:17:58
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::ranges::{blockers_remove, range_from_top_pct, HAND_RANKING};
[INFO] [stdout]    |                                                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `detect_street`
[INFO] [stdout]   --> src/play.rs:19:22
[INFO] [stdout]    |
[INFO] [stdout] 19 |     default_villain, detect_street, format_strategy, StrategyEngine, StrategySource,
[INFO] [stdout]    |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bb_amount`
[INFO] [stdout]    --> src/play.rs:455:9
[INFO] [stdout]     |
[INFO] [stdout] 455 |     let bb_amount = 1.0; // Use bb as unit
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bb_amount`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_solver_preflop`
[INFO] [stdout]    --> src/play.rs:495:9
[INFO] [stdout]     |
[INFO] [stdout] 495 |     let has_solver_preflop = show_preflop_advice(
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_solver_preflop`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `board_str` is never read
[INFO] [stdout]    --> src/play.rs:514:25
[INFO] [stdout]     |
[INFO] [stdout] 514 |     let mut board_str = String::new();
[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: unused variable: `b`
[INFO] [stdout]    --> src/flop_enumerator.rs:277:13
[INFO] [stdout]     |
[INFO] [stdout] 277 |         let b = canonicalize(&[(11, 0), (7, 1), (2, 0)]); // Ks9h4s
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_b`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bb_amount`
[INFO] [stdout]    --> src/play.rs:455:9
[INFO] [stdout]     |
[INFO] [stdout] 455 |     let bb_amount = 1.0; // Use bb as unit
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bb_amount`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_solver_preflop`
[INFO] [stdout]    --> src/play.rs:495:9
[INFO] [stdout]     |
[INFO] [stdout] 495 |     let has_solver_preflop = show_preflop_advice(
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_solver_preflop`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `board_str` is never read
[INFO] [stdout]    --> src/play.rs:514:25
[INFO] [stdout]     |
[INFO] [stdout] 514 |     let mut board_str = String::new();
[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: function `parse_sizing_pct` is never used
[INFO] [stdout]    --> src/play.rs:377:4
[INFO] [stdout]     |
[INFO] [stdout] 377 | fn parse_sizing_pct(sizing: &str) -> Option<f64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fold` is never read
[INFO] [stdout]   --> src/preflop.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | struct SqueezeEntry {
[INFO] [stdout]    |        ------------ field in this struct
[INFO] [stdout] 36 |     squeeze: Vec<String>,
[INFO] [stdout] 37 |     fold: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SqueezeEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gto_cli::lookup_eval::evaluate_fast`
[INFO] [stdout]  --> tests/test_river_solver.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use gto_cli::lookup_eval::evaluate_fast;
[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: `Player`
[INFO] [stdout]  --> tests/test_river_solver.rs:6:42
[INFO] [stdout]   |
[INFO] [stdout] 6 | use gto_cli::postflop_tree::{build_tree, Player, TerminalType, TreeConfig, TreeNode};
[INFO] [stdout]   |                                          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cards_to_indices`
[INFO] [stdout]  --> tests/test_lookup_eval.rs:5:45
[INFO] [stdout]   |
[INFO] [stdout] 5 | use gto_cli::card_encoding::{card_to_index, cards_to_indices, index_to_card};
[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: `HandCategory`
[INFO] [stdout]  --> tests/test_lookup_eval.rs:7:61
[INFO] [stdout]   |
[INFO] [stdout] 7 | use gto_cli::hand_evaluator::{compare_hands, evaluate_hand, HandCategory};
[INFO] [stdout]   |                                                             ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gto_cli::error::GtoError`
[INFO] [stdout]  --> tests/test_cards.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use gto_cli::error::GtoError;
[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: `Rank`
[INFO] [stdout]  --> src/card_encoding.rs:7:26
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::cards::{Card, Rank, Suit, ALL_RANKS, ALL_SUITS};
[INFO] [stdout]   |                          ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `break_even_pct` and `spr as calc_spr`
[INFO] [stdout]   --> src/play.rs:10:26
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::math_engine::{break_even_pct, spr as calc_spr, SprZone};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::multiway::multiway_range_adjustment`
[INFO] [stdout]   --> src/play.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::multiway::multiway_range_adjustment;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get_rfi_pct`
[INFO] [stdout]   --> src/play.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     get_rfi_pct, get_rfi_range, preflop_action, positions_for,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HAND_RANKING`
[INFO] [stdout]   --> src/play.rs:17:58
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::ranges::{blockers_remove, range_from_top_pct, HAND_RANKING};
[INFO] [stdout]    |                                                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `detect_street`
[INFO] [stdout]   --> src/play.rs:19:22
[INFO] [stdout]    |
[INFO] [stdout] 19 |     default_villain, detect_street, format_strategy, StrategyEngine, StrategySource,
[INFO] [stdout]    |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fold` is never read
[INFO] [stdout]   --> src/preflop.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | struct SqueezeEntry {
[INFO] [stdout]    |        ------------ field in this struct
[INFO] [stdout] 36 |     squeeze: Vec<String>,
[INFO] [stdout] 37 |     fold: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SqueezeEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `break_even_pct` and `spr as calc_spr`
[INFO] [stdout]   --> src/play.rs:10:26
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::math_engine::{break_even_pct, spr as calc_spr, SprZone};
[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: `crate::multiway::multiway_range_adjustment`
[INFO] [stdout]   --> src/play.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::multiway::multiway_range_adjustment;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get_rfi_pct`
[INFO] [stdout]   --> src/play.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     get_rfi_pct, get_rfi_range, preflop_action, positions_for,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HAND_RANKING`
[INFO] [stdout]   --> src/play.rs:17:58
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::ranges::{blockers_remove, range_from_top_pct, HAND_RANKING};
[INFO] [stdout]    |                                                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `detect_street`
[INFO] [stdout]   --> src/play.rs:19:22
[INFO] [stdout]    |
[INFO] [stdout] 19 |     default_villain, detect_street, format_strategy, StrategyEngine, StrategySource,
[INFO] [stdout]    |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bb_amount`
[INFO] [stdout]    --> src/play.rs:455:9
[INFO] [stdout]     |
[INFO] [stdout] 455 |     let bb_amount = 1.0; // Use bb as unit
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bb_amount`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_solver_preflop`
[INFO] [stdout]    --> src/play.rs:495:9
[INFO] [stdout]     |
[INFO] [stdout] 495 |     let has_solver_preflop = show_preflop_advice(
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_solver_preflop`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `board_str` is never read
[INFO] [stdout]    --> src/play.rs:514:25
[INFO] [stdout]     |
[INFO] [stdout] 514 |     let mut board_str = String::new();
[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: function `cards_to_indices` is never used
[INFO] [stdout]   --> src/card_encoding.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn cards_to_indices(cards: &[Card]) -> Vec<u8> {
[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 `SUITS_STR` is never used
[INFO] [stdout]   --> src/cards.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const SUITS_STR: &str = "shdc";
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Deck` is never constructed
[INFO] [stdout]    --> src/cards.rs:179:12
[INFO] [stdout]     |
[INFO] [stdout] 179 | pub struct Deck {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `shuffle`, `deal`, and `len` are never used
[INFO] [stdout]    --> src/cards.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout] 183 | impl Deck {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout] 184 |     pub fn new(exclude: Option<&[Card]>) -> Deck {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn shuffle(&mut self) -> &mut Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn deal(&mut self, n: usize) -> GtoResult<Vec<Card>> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rank_index` is never used
[INFO] [stdout]    --> src/cards.rs:314:8
[INFO] [stdout]     |
[INFO] [stdout] 314 | pub fn rank_index(c: char) -> Option<usize> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/cli.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl Situation {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] 50 |     fn as_str(&self) -> &'static str {
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run` is never used
[INFO] [stdout]    --> src/cli.rs:403:8
[INFO] [stdout]     |
[INFO] [stdout] 403 | pub fn run() {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `range_grid_strs` is never used
[INFO] [stdout]   --> src/display.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn range_grid_strs(hands_in_range: &[&str], title: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `odds_table` is never used
[INFO] [stdout]    --> src/display.rs:119:8
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub fn odds_table(pot: f64, bet: f64, equity_needed: f64, ev_value: Option<f64>) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_action` is never used
[INFO] [stdout]    --> src/display.rs:190:8
[INFO] [stdout]     |
[INFO] [stdout] 190 | pub fn print_action(action: &str, detail: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_section` is never used
[INFO] [stdout]    --> src/display.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub fn print_section(title: &str, content: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_success` is never used
[INFO] [stdout]    --> src/display.rs:208:8
[INFO] [stdout]     |
[INFO] [stdout] 208 | pub fn print_success(msg: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `NotEnoughDeck` and `RangeDataNotFound` are never constructed
[INFO] [stdout]   --> src/error.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout]  4 | pub enum GtoError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 24 |     NotEnoughDeck { requested: usize, available: usize },
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     RangeDataNotFound(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GtoError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `num_nodes`, `total_entries`, and `memory_bytes` are never used
[INFO] [stdout]   --> src/flat_cfr.rs:64:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl FlatCfr {
[INFO] [stdout]    | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn num_nodes(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn total_entries(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn memory_bytes(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cards` is never read
[INFO] [stdout]   --> src/hand_evaluator.rs:45:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct HandResult {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub cards: Vec<Card>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HandResult` 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: function `compare_hands` is never used
[INFO] [stdout]    --> src/hand_evaluator.rs:234:8
[INFO] [stdout]     |
[INFO] [stdout] 234 | pub fn compare_hands(hand1: &[Card], hand2: &[Card], board: &[Card]) -> GtoResult<i32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `category_from_score` is never used
[INFO] [stdout]    --> src/lookup_eval.rs:202:8
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub fn category_from_score(score: u32) -> HandCategory {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `kickers_from_score` is never used
[INFO] [stdout]    --> src/lookup_eval.rs:218:8
[INFO] [stdout]     |
[INFO] [stdout] 218 | pub fn kickers_from_score(score: u32) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `reverse_implied_odds` is never used
[INFO] [stdout]   --> src/math_engine.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub fn reverse_implied_odds(pot: f64, bet: f64, risk: f64) -> GtoResult<f64> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fold_equity` is never used
[INFO] [stdout]   --> src/math_engine.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn fold_equity(fold_pct: f64, pot: f64, bet: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `effective_stack` is never used
[INFO] [stdout]    --> src/math_engine.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn effective_stack(stacks: &[f64]) -> GtoResult<f64> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultiwayBetAdvice` is never constructed
[INFO] [stdout]  --> src/multiway.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct MultiwayBetAdvice {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiway_cbet` is never used
[INFO] [stdout]   --> src/multiway.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn multiway_cbet(num_players: usize, board_wetness: &str, position: &str) -> MultiwayBetAdvice {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiway_sizing` is never used
[INFO] [stdout]   --> src/multiway.rs:83:8
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub fn multiway_sizing(num_players: usize, board_wetness: &str) -> &'static str {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `POSITION_ORDER_6MAX` is never used
[INFO] [stdout]   --> src/play.rs:26:7
[INFO] [stdout]    |
[INFO] [stdout] 26 | const POSITION_ORDER_6MAX: &[(&str, u8)] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `POSITION_ORDER_9MAX` is never used
[INFO] [stdout]   --> src/play.rs:30:7
[INFO] [stdout]    |
[INFO] [stdout] 30 | const POSITION_ORDER_9MAX: &[(&str, u8)] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `position_order` is never used
[INFO] [stdout]   --> src/play.rs:35:4
[INFO] [stdout]    |
[INFO] [stdout] 35 | fn position_order(pos: &str, table_size: &str) -> u8 {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_in_position` is never used
[INFO] [stdout]   --> src/play.rs:44:8
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub fn is_in_position(hero_pos: &str, villain_pos: &str, table_size: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_position` is never used
[INFO] [stdout]   --> src/play.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub fn explain_position(pos: &str) -> &'static str {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_hand_category` is never used
[INFO] [stdout]    --> src/play.rs:193:8
[INFO] [stdout]     |
[INFO] [stdout] 193 | pub fn explain_hand_category(category: HandCategory) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_board_texture` is never used
[INFO] [stdout]    --> src/play.rs:208:8
[INFO] [stdout]     |
[INFO] [stdout] 208 | pub fn explain_board_texture(wetness: Wetness) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_spr` is never used
[INFO] [stdout]    --> src/play.rs:216:8
[INFO] [stdout]     |
[INFO] [stdout] 216 | pub fn explain_spr(zone: SprZone) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_strength` is never used
[INFO] [stdout]    --> src/play.rs:224:8
[INFO] [stdout]     |
[INFO] [stdout] 224 | pub fn explain_strength(strength: &str) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_sizing_pct` is never used
[INFO] [stdout]    --> src/play.rs:377:4
[INFO] [stdout]     |
[INFO] [stdout] 377 | fn parse_sizing_pct(sizing: &str) -> Option<f64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `cards`, `is_monotone`, `is_two_tone`, `is_rainbow`, and `connectedness` are never read
[INFO] [stdout]   --> src/postflop.rs:42:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct BoardTexture {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 42 |     pub cards: Vec<Card>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub is_monotone: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 46 |     pub is_two_tone: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 47 |     pub is_rainbow: bool,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub connectedness: Connectedness,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BoardTexture` 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: field `should_cbet` is never read
[INFO] [stdout]    --> src/postflop.rs:226:9
[INFO] [stdout]     |
[INFO] [stdout] 225 | pub struct CBetRecommendation {
[INFO] [stdout]     |            ------------------ field in this struct
[INFO] [stdout] 226 |     pub should_cbet: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `hand_strength` is never read
[INFO] [stdout]    --> src/postflop.rs:376:9
[INFO] [stdout]     |
[INFO] [stdout] 372 | pub struct StreetStrategy {
[INFO] [stdout]     |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 376 |     pub hand_strength: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `pot`, `stacks`, and `invested` are never read
[INFO] [stdout]   --> src/postflop_tree.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 83 |     Chance {
[INFO] [stdout]    |     ------ fields in this variant
[INFO] [stdout] 84 |         pot: f64,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 85 |         stacks: [f64; 2],
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 86 |         invested: [f64; 2],
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TreeNode` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `count_action_nodes` and `count_terminal_nodes` are never used
[INFO] [stdout]    --> src/postflop_tree.rs:95:12
[INFO] [stdout]     |
[INFO] [stdout]  94 | impl TreeNode {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout]  95 |     pub fn count_action_nodes(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn count_terminal_nodes(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `default_river` is never used
[INFO] [stdout]    --> src/postflop_tree.rs:137:12
[INFO] [stdout]     |
[INFO] [stdout] 136 | impl TreeConfig {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] 137 |     pub fn default_river(starting_pot: f64, effective_stack: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `squeeze` and `fold` are never read
[INFO] [stdout]   --> src/preflop.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | struct SqueezeEntry {
[INFO] [stdout]    |        ------------ fields in this struct
[INFO] [stdout] 36 |     squeeze: Vec<String>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 37 |     fold: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SqueezeEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `squeeze` is never read
[INFO] [stdout]   --> src/preflop.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | struct RangeData {
[INFO] [stdout]    |        --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 54 |     squeeze: HashMap<String, SqueezeEntry>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RangeData` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fold` is never read
[INFO] [stdout]    --> src/preflop.rs:116:9
[INFO] [stdout]     |
[INFO] [stdout] 113 | pub struct VsRfiResult {
[INFO] [stdout]     |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fold: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `VsRfiResult` 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: field `fold` is never read
[INFO] [stdout]    --> src/preflop.rs:154:9
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub struct Vs3BetResult {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fold: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Vs3BetResult` 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: function `get_squeeze_range` is never used
[INFO] [stdout]    --> src/preflop.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub fn get_squeeze_range(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `hand` and `position` are never read
[INFO] [stdout]    --> src/preflop.rs:229:9
[INFO] [stdout]     |
[INFO] [stdout] 227 | pub struct PreflopAction {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] 228 |     pub action: String,
[INFO] [stdout] 229 |     pub hand: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 230 |     pub position: String,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `total_combos_strs` is never used
[INFO] [stdout]    --> src/ranges.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 174 | pub fn total_combos_strs(hands: &[&str]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `range_pct_strs` is never used
[INFO] [stdout]    --> src/ranges.rs:182:8
[INFO] [stdout]     |
[INFO] [stdout] 182 | pub fn range_pct_strs(hands: &[&str]) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blocked_combos` is never used
[INFO] [stdout]    --> src/ranges.rs:202:8
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub fn blocked_combos(hand_notation: &str, hero_cards: &[Card]) -> GtoResult<u32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stack_bb` is never read
[INFO] [stdout]   --> src/strategy.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct StrategyEngine {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 17 |     preflop: Option<PreflopSolution>,
[INFO] [stdout] 18 |     pub stack_bb: f64,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `SolvedOnDemand` is never constructed
[INFO] [stdout]   --> src/strategy.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum StrategySource {
[INFO] [stdout]    |          -------------- variant in this enum
[INFO] [stdout] 29 |     Cached,
[INFO] [stdout] 30 |     SolvedOnDemand,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StrategySource` 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: variant `FourBet` is never constructed
[INFO] [stdout]   --> src/strategy.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub enum PotType {
[INFO] [stdout]    |          ------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 42 |     FourBet,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PotType` 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: unused variable: `b`
[INFO] [stdout]    --> src/flop_enumerator.rs:277:13
[INFO] [stdout]     |
[INFO] [stdout] 277 |         let b = canonicalize(&[(11, 0), (7, 1), (2, 0)]); // Ks9h4s
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_b`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bb_amount`
[INFO] [stdout]    --> src/play.rs:455:9
[INFO] [stdout]     |
[INFO] [stdout] 455 |     let bb_amount = 1.0; // Use bb as unit
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bb_amount`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_solver_preflop`
[INFO] [stdout]    --> src/play.rs:495:9
[INFO] [stdout]     |
[INFO] [stdout] 495 |     let has_solver_preflop = show_preflop_advice(
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_solver_preflop`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `board_str` is never read
[INFO] [stdout]    --> src/play.rs:514:25
[INFO] [stdout]     |
[INFO] [stdout] 514 |     let mut board_str = String::new();
[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: function `cards_to_indices` is never used
[INFO] [stdout]   --> src/card_encoding.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn cards_to_indices(cards: &[Card]) -> Vec<u8> {
[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 `SUITS_STR` is never used
[INFO] [stdout]   --> src/cards.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const SUITS_STR: &str = "shdc";
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Deck` is never constructed
[INFO] [stdout]    --> src/cards.rs:179:12
[INFO] [stdout]     |
[INFO] [stdout] 179 | pub struct Deck {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `shuffle`, `deal`, and `len` are never used
[INFO] [stdout]    --> src/cards.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout] 183 | impl Deck {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout] 184 |     pub fn new(exclude: Option<&[Card]>) -> Deck {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn shuffle(&mut self) -> &mut Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn deal(&mut self, n: usize) -> GtoResult<Vec<Card>> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rank_index` is never used
[INFO] [stdout]    --> src/cards.rs:314:8
[INFO] [stdout]     |
[INFO] [stdout] 314 | pub fn rank_index(c: char) -> Option<usize> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/cli.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl Situation {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] 50 |     fn as_str(&self) -> &'static str {
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run` is never used
[INFO] [stdout]    --> src/cli.rs:403:8
[INFO] [stdout]     |
[INFO] [stdout] 403 | pub fn run() {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `range_grid_strs` is never used
[INFO] [stdout]   --> src/display.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn range_grid_strs(hands_in_range: &[&str], title: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `odds_table` is never used
[INFO] [stdout]    --> src/display.rs:119:8
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub fn odds_table(pot: f64, bet: f64, equity_needed: f64, ev_value: Option<f64>) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_action` is never used
[INFO] [stdout]    --> src/display.rs:190:8
[INFO] [stdout]     |
[INFO] [stdout] 190 | pub fn print_action(action: &str, detail: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_section` is never used
[INFO] [stdout]    --> src/display.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub fn print_section(title: &str, content: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_success` is never used
[INFO] [stdout]    --> src/display.rs:208:8
[INFO] [stdout]     |
[INFO] [stdout] 208 | pub fn print_success(msg: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `NotEnoughDeck` and `RangeDataNotFound` are never constructed
[INFO] [stdout]   --> src/error.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout]  4 | pub enum GtoError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 24 |     NotEnoughDeck { requested: usize, available: usize },
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     RangeDataNotFound(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GtoError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cards` is never read
[INFO] [stdout]   --> src/hand_evaluator.rs:45:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct HandResult {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub cards: Vec<Card>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HandResult` 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: function `compare_hands` is never used
[INFO] [stdout]    --> src/hand_evaluator.rs:234:8
[INFO] [stdout]     |
[INFO] [stdout] 234 | pub fn compare_hands(hand1: &[Card], hand2: &[Card], board: &[Card]) -> GtoResult<i32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `reverse_implied_odds` is never used
[INFO] [stdout]   --> src/math_engine.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub fn reverse_implied_odds(pot: f64, bet: f64, risk: f64) -> GtoResult<f64> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fold_equity` is never used
[INFO] [stdout]   --> src/math_engine.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn fold_equity(fold_pct: f64, pot: f64, bet: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `effective_stack` is never used
[INFO] [stdout]    --> src/math_engine.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn effective_stack(stacks: &[f64]) -> GtoResult<f64> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultiwayBetAdvice` is never constructed
[INFO] [stdout]  --> src/multiway.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct MultiwayBetAdvice {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiway_cbet` is never used
[INFO] [stdout]   --> src/multiway.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn multiway_cbet(num_players: usize, board_wetness: &str, position: &str) -> MultiwayBetAdvice {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiway_sizing` is never used
[INFO] [stdout]   --> src/multiway.rs:83:8
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub fn multiway_sizing(num_players: usize, board_wetness: &str) -> &'static str {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_strength` is never used
[INFO] [stdout]    --> src/play.rs:224:8
[INFO] [stdout]     |
[INFO] [stdout] 224 | pub fn explain_strength(strength: &str) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `cards`, `is_monotone`, `is_two_tone`, `is_rainbow`, and `connectedness` are never read
[INFO] [stdout]   --> src/postflop.rs:42:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct BoardTexture {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 42 |     pub cards: Vec<Card>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub is_monotone: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 46 |     pub is_two_tone: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 47 |     pub is_rainbow: bool,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub connectedness: Connectedness,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BoardTexture` 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: field `should_cbet` is never read
[INFO] [stdout]    --> src/postflop.rs:226:9
[INFO] [stdout]     |
[INFO] [stdout] 225 | pub struct CBetRecommendation {
[INFO] [stdout]     |            ------------------ field in this struct
[INFO] [stdout] 226 |     pub should_cbet: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `hand_strength` is never read
[INFO] [stdout]    --> src/postflop.rs:376:9
[INFO] [stdout]     |
[INFO] [stdout] 372 | pub struct StreetStrategy {
[INFO] [stdout]     |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 376 |     pub hand_strength: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `pot`, `stacks`, and `invested` are never read
[INFO] [stdout]   --> src/postflop_tree.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 83 |     Chance {
[INFO] [stdout]    |     ------ fields in this variant
[INFO] [stdout] 84 |         pot: f64,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 85 |         stacks: [f64; 2],
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 86 |         invested: [f64; 2],
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TreeNode` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `squeeze` and `fold` are never read
[INFO] [stdout]   --> src/preflop.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | struct SqueezeEntry {
[INFO] [stdout]    |        ------------ fields in this struct
[INFO] [stdout] 36 |     squeeze: Vec<String>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 37 |     fold: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SqueezeEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `squeeze` is never read
[INFO] [stdout]   --> src/preflop.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | struct RangeData {
[INFO] [stdout]    |        --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 54 |     squeeze: HashMap<String, SqueezeEntry>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RangeData` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fold` is never read
[INFO] [stdout]    --> src/preflop.rs:116:9
[INFO] [stdout]     |
[INFO] [stdout] 113 | pub struct VsRfiResult {
[INFO] [stdout]     |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fold: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `VsRfiResult` 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: field `fold` is never read
[INFO] [stdout]    --> src/preflop.rs:154:9
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub struct Vs3BetResult {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fold: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Vs3BetResult` 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: function `get_squeeze_range` is never used
[INFO] [stdout]    --> src/preflop.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub fn get_squeeze_range(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `hand` and `position` are never read
[INFO] [stdout]    --> src/preflop.rs:229:9
[INFO] [stdout]     |
[INFO] [stdout] 227 | pub struct PreflopAction {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] 228 |     pub action: String,
[INFO] [stdout] 229 |     pub hand: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 230 |     pub position: String,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `total_combos_strs` is never used
[INFO] [stdout]    --> src/ranges.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 174 | pub fn total_combos_strs(hands: &[&str]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `range_pct_strs` is never used
[INFO] [stdout]    --> src/ranges.rs:182:8
[INFO] [stdout]     |
[INFO] [stdout] 182 | pub fn range_pct_strs(hands: &[&str]) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blocked_combos` is never used
[INFO] [stdout]    --> src/ranges.rs:202:8
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub fn blocked_combos(hand_notation: &str, hero_cards: &[Card]) -> GtoResult<u32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stack_bb` is never read
[INFO] [stdout]   --> src/strategy.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct StrategyEngine {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 17 |     preflop: Option<PreflopSolution>,
[INFO] [stdout] 18 |     pub stack_bb: f64,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `SolvedOnDemand` is never constructed
[INFO] [stdout]   --> src/strategy.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum StrategySource {
[INFO] [stdout]    |          -------------- variant in this enum
[INFO] [stdout] 29 |     Cached,
[INFO] [stdout] 30 |     SolvedOnDemand,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StrategySource` 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: variant `FourBet` is never constructed
[INFO] [stdout]   --> src/strategy.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub enum PotType {
[INFO] [stdout]    |          ------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 42 |     FourBet,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PotType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 9.07s
[INFO] running `Command { std: "docker" "inspect" "4ba2141f23449d19ef1b091e23202ab20b67647f9b47a72926bd19510b53c4b5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "4ba2141f23449d19ef1b091e23202ab20b67647f9b47a72926bd19510b53c4b5", kill_on_drop: false }`
[INFO] [stdout] 4ba2141f23449d19ef1b091e23202ab20b67647f9b47a72926bd19510b53c4b5
