[INFO] cloning repository https://github.com/Jeklah/echoes_rpg
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Jeklah/echoes_rpg" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FJeklah%2Fechoes_rpg", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FJeklah%2Fechoes_rpg'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 8e72bf0958269dd987d41c6cd1f82ee227c3e60f
[INFO] testing Jeklah/echoes_rpg against try#db823df02fd0c2cf67b43025ac3fef3f2d743245 for pr-150681
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FJeklah%2Fechoes_rpg" "/workspace/builds/worker-4-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc2/source'...
[INFO] [stderr] done.
[INFO] removed /workspace/builds/worker-4-tc2/source/.cargo/config.toml
[INFO] started tweaking git repo https://github.com/Jeklah/echoes_rpg
[INFO] finished tweaking git repo https://github.com/Jeklah/echoes_rpg
[INFO] tweaked toml for git repo https://github.com/Jeklah/echoes_rpg written to /workspace/builds/worker-4-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Jeklah/echoes_rpg on toolchain db823df02fd0c2cf67b43025ac3fef3f2d743245
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Jeklah/echoes_rpg 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" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 6aedc33075bb89c79f14727d1290c6631fdec9474be21b04b5c37374cbf396b6
[INFO] running `Command { std: "docker" "start" "-a" "6aedc33075bb89c79f14727d1290c6631fdec9474be21b04b5c37374cbf396b6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "6aedc33075bb89c79f14727d1290c6631fdec9474be21b04b5c37374cbf396b6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6aedc33075bb89c79f14727d1290c6631fdec9474be21b04b5c37374cbf396b6", kill_on_drop: false }`
[INFO] [stdout] 6aedc33075bb89c79f14727d1290c6631fdec9474be21b04b5c37374cbf396b6
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] dc083153141b36bb2988c2c76d9c063166389af63d8807af45aaf8d6a4735c8d
[INFO] running `Command { std: "docker" "start" "-a" "dc083153141b36bb2988c2c76d9c063166389af63d8807af45aaf8d6a4735c8d", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.175
[INFO] [stderr]    Compiling cfg-if v1.0.3
[INFO] [stderr]    Compiling proc-macro2 v1.0.101
[INFO] [stderr]    Compiling zerocopy v0.8.26
[INFO] [stderr]    Compiling autocfg v1.5.0
[INFO] [stderr]    Compiling parking_lot_core v0.9.11
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling log v0.4.28
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling scopeguard v1.2.0
[INFO] [stderr]    Compiling serde_json v1.0.143
[INFO] [stderr]    Compiling anyhow v1.0.99
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling serde v1.0.219
[INFO] [stderr]    Compiling bitflags v2.9.4
[INFO] [stderr]    Compiling memchr v2.7.5
[INFO] [stderr]    Compiling lock_api v0.4.13
[INFO] [stderr]    Compiling quote v1.0.40
[INFO] [stderr]    Compiling syn v2.0.106
[INFO] [stderr]    Compiling getrandom v0.2.16
[INFO] [stderr]    Compiling signal-hook-registry v1.4.6
[INFO] [stderr]    Compiling mio v0.8.11
[INFO] [stderr]    Compiling dirs-sys v0.4.1
[INFO] [stderr]    Compiling atty v0.2.14
[INFO] [stderr]    Compiling dirs v5.0.1
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling parking_lot v0.12.4
[INFO] [stderr]    Compiling signal-hook-mio v0.2.4
[INFO] [stderr]    Compiling crossterm v0.27.0
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling serde_derive v1.0.219
[INFO] [stderr]    Compiling echoes_rpg v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: enum `ClassType` is never used
[INFO] [stdout]  --> src/character/class.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum ClassType {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Class` is never constructed
[INFO] [stdout]   --> src/character/class.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct Class {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `base_stats`, `level_up_stats`, and `use_ability` are never used
[INFO] [stdout]    --> src/character/class.rs:31:12
[INFO] [stdout]     |
[INFO] [stdout]  30 | impl Class {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout]  31 |     pub fn new(class_type: ClassType) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  45 |     pub fn base_stats(&self) -> Stats {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn level_up_stats(&self, stats: &mut Stats) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn use_ability(&self, ability_index: usize) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Player` is never constructed
[INFO] [stdout]  --> src/character/player.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct Player {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/character/player.rs:22:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl Player {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout]  22 |     pub fn new(name: String, class_type: ClassType) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn gain_experience(&mut self, exp: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  55 |     pub fn level_up(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn heal(&mut self, amount: i32) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     pub fn is_alive(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn attack_damage(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn defense(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn take_damage(&mut self, amount: i32) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn use_ability(&mut self, ability_index: usize) -> Result<String, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `StatType` is never used
[INFO] [stdout]  --> src/character/stats.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum StatType {
[INFO] [stdout]   |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Stats` is never constructed
[INFO] [stdout]   --> src/character/stats.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct Stats {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/character/stats.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl Stats {
[INFO] [stdout]    | ---------- associated items in this implementation
[INFO] [stdout] 22 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn modify_stat(&mut self, stat_type: StatType, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn set_strength(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn set_intelligence(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn set_dexterity(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn set_constitution(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn set_wisdom(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn increase_strength(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn increase_intelligence(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     pub fn increase_dexterity(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn increase_constitution(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn increase_wisdom(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ItemInfo` is never constructed
[INFO] [stdout]   --> src/inventory/mod.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct ItemInfo {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ActionResult` is never constructed
[INFO] [stdout]   --> src/inventory/mod.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct ActionResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `success`, `success_consumed`, and `failure` are never used
[INFO] [stdout]   --> src/inventory/mod.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | impl ActionResult {
[INFO] [stdout]    | ----------------- associated functions in this implementation
[INFO] [stdout] 74 |     pub fn success(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn success_consumed(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 88 |     pub fn failure(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Inventory` is never constructed
[INFO] [stdout]   --> src/inventory/manager.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Inventory {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `add_item`, `equip_item`, `get_equipped_weapon`, and `get_total_armor_defense` are never used
[INFO] [stdout]   --> src/inventory/manager.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Inventory {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(max_size: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn add_item(&mut self, item: Item) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn equip_item(&mut self, index: usize) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn get_equipped_weapon(&self) -> Option<&Equipment> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn get_total_armor_defense(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `InventoryManager` is never constructed
[INFO] [stdout]   --> src/inventory/manager.rs:97:12
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub struct InventoryManager;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/inventory/manager.rs:101:12
[INFO] [stdout]     |
[INFO] [stdout]  99 | impl InventoryManager {
[INFO] [stdout]     | --------------------- associated functions in this implementation
[INFO] [stdout] 100 |     /// Get all items in the inventory with display information
[INFO] [stdout] 101 |     pub fn get_items(player: &Player) -> Vec<ItemInfo> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn is_empty(player: &Player) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn use_item(player: &mut Player, index: usize) -> ActionResult {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     fn equip_item(
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     fn use_consumable(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn add_item(player: &mut Player, item: Item) -> ActionResult {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 206 |     pub fn get_item(player: &Player, index: usize) -> Option<&Item> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn get_item_count(player: &Player) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Item` is never used
[INFO] [stdout]   --> src/item/mod.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum Item {
[INFO] [stdout]    |          ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `name`, `generate_random`, and `generate_for_chest` are never used
[INFO] [stdout]   --> src/item/mod.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl Item {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 23 |     pub fn name(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn generate_random(level: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn generate_for_chest(level: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ConsumableType` is never used
[INFO] [stdout]  --> src/item/consumable.rs:7:10
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum ConsumableType {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Consumable` is never constructed
[INFO] [stdout]   --> src/item/consumable.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct Consumable {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `use_effect` and `generate_random` are never used
[INFO] [stdout]   --> src/item/consumable.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl Consumable {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 28 |     pub fn use_effect(&self, player: &mut Player) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn generate_random(level: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EquipmentSlot` is never used
[INFO] [stdout]  --> src/item/equipment.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub enum EquipmentSlot {
[INFO] [stdout]   |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `iter` is never used
[INFO] [stdout]   --> src/item/equipment.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl EquipmentSlot {
[INFO] [stdout]    | ------------------ associated function in this implementation
[INFO] [stdout] 18 |     pub fn iter() -> impl Iterator<Item = EquipmentSlot> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EquipmentType` is never used
[INFO] [stdout]   --> src/item/equipment.rs:45:10
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub enum EquipmentType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Equipment` is never constructed
[INFO] [stdout]   --> src/item/equipment.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct Equipment {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `generate_random` is never used
[INFO] [stdout]   --> src/item/equipment.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 62 | impl Equipment {
[INFO] [stdout]    | -------------- associated function in this implementation
[INFO] [stdout] 63 |     pub fn generate_random(level: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `random` is never used
[INFO] [stdout]   --> src/world/mod.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl DungeonType {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn random() -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Dungeon` is never constructed
[INFO] [stdout]   --> src/world/mod.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct Dungeon {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/world/mod.rs:67:12
[INFO] [stdout]     |
[INFO] [stdout]  66 | impl Dungeon {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout]  67 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn generate_random(player_level: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn current_level(&self) -> &Level {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn current_level_mut(&mut self) -> &mut Level {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn go_to_next_level(&mut self) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub fn go_to_previous_level(&mut self) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn is_final_level(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EnemyType` is never used
[INFO] [stdout]  --> src/world/enemy.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum EnemyType {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_base_stats`, `description`, and `get_level_range` are never used
[INFO] [stdout]    --> src/world/enemy.rs:24:12
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl EnemyType {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout]  24 |     pub fn get_base_stats(&self) -> Stats {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn description(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn get_level_range(&self) -> Range<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Enemy` is never constructed
[INFO] [stdout]    --> src/world/enemy.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub struct Enemy {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/world/enemy.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 151 | impl Enemy {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout] 152 |     pub fn new(name: String, enemy_type: EnemyType, level: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 223 |     pub fn generate_random(level: u32, difficulty: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn attack_damage(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub fn defense(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 327 |     pub fn take_damage(&mut self, amount: i32) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 336 |     pub fn is_alive(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 340 |     pub fn get_drops(&self) -> (u32, u32, Option<Item>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_standard_fog_of_war` is never used
[INFO] [stdout]   --> src/world/fog_factory.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub fn create_standard_fog_of_war() -> FogOfWar {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `VisibilityState` is never used
[INFO] [stdout]   --> src/world/fog_of_war.rs:11:10
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub enum VisibilityState {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FogColor` is never constructed
[INFO] [stdout]   --> src/world/fog_of_war.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub struct FogColor {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `BLACK`, `WHITE`, `DARK_GREY`, `GREY`, and `dimmed` are never used
[INFO] [stdout]   --> src/world/fog_of_war.rs:30:15
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl FogColor {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 30 |     pub const BLACK: Self = Self {
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub const WHITE: Self = Self {
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub const DARK_GREY: Self = Self {
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub const GREY: Self = Self {
[INFO] [stdout]    |               ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub fn dimmed(&self, factor: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FogOfWarConfig` is never constructed
[INFO] [stdout]   --> src/world/fog_of_war.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct FogOfWarConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FogRenderResult` is never constructed
[INFO] [stdout]   --> src/world/fog_of_war.rs:92:12
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub struct FogRenderResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FogOfWar` is never constructed
[INFO] [stdout]    --> src/world/fog_of_war.rs:102:12
[INFO] [stdout]     |
[INFO] [stdout] 102 | pub struct FogOfWar {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get_visibility_state`, `process_tile`, `process_position`, and `get_tile_color` are never used
[INFO] [stdout]    --> src/world/fog_of_war.rs:108:12
[INFO] [stdout]     |
[INFO] [stdout] 106 | impl FogOfWar {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout] 107 |     /// Create a new fog of war processor with the given configuration
[INFO] [stdout] 108 |     pub fn new(config: FogOfWarConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn get_visibility_state(&self, tile: &Tile) -> VisibilityState {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn process_tile(
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn process_position(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     fn get_tile_color(&self, tile_type: &crate::world::TileType) -> FogColor {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `to_terminal_color` is never used
[INFO] [stdout]    --> src/world/fog_of_war.rs:312:12
[INFO] [stdout]     |
[INFO] [stdout] 300 | impl FogOfWar {
[INFO] [stdout]     | ------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 312 |     pub fn to_terminal_color(color: &FogColor) -> crossterm::style::Color {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAP_WIDTH` is never used
[INFO] [stdout]  --> src/world/level.rs:7:7
[INFO] [stdout]   |
[INFO] [stdout] 7 | const MAP_WIDTH: usize = 80;
[INFO] [stdout]   |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAP_HEIGHT` is never used
[INFO] [stdout]  --> src/world/level.rs:8:7
[INFO] [stdout]   |
[INFO] [stdout] 8 | const MAP_HEIGHT: usize = 45;
[INFO] [stdout]   |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Position` is never constructed
[INFO] [stdout]   --> src/world/level.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Position {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/world/level.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl Position {
[INFO] [stdout]    | ------------- associated function in this implementation
[INFO] [stdout] 17 |     pub fn new(x: i32, y: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Room` is never constructed
[INFO] [stdout]   --> src/world/level.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct Room {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `center`, `intersects`, `width`, and `height` are never used
[INFO] [stdout]   --> src/world/level.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl Room {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 31 |     pub fn new(x: i32, y: i32, width: i32, height: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn center(&self) -> Position {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn intersects(&self, other: &Room) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn width(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn height(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Level` is never constructed
[INFO] [stdout]   --> src/world/level.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct Level {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/world/level.rs:75:12
[INFO] [stdout]     |
[INFO] [stdout]  74 | impl Level {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout]  75 |     pub fn new(width: usize, height: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn generate(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     fn create_room(&mut self, room: &Room) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     fn create_horizontal_tunnel(&mut self, x1: i32, x2: i32, y: i32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     fn create_vertical_tunnel(&mut self, y1: i32, y2: i32, x: i32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     fn place_doors(&mut self, room: &Room) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 267 |     fn is_valid_door_position(&self, x: i32, y: i32) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 291 |     fn place_enemies(&mut self, difficulty: u32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 322 |     fn place_items(&mut self, _difficulty: u32) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     pub fn is_position_valid(&self, x: i32, y: i32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 393 |     pub fn is_tile_walkable(&self, pos: Position) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 400 |     pub fn get_tile(&self, x: i32, y: i32) -> Option<&Tile> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 408 |     pub fn get_tile_mut(&mut self, x: i32, y: i32) -> Option<&mut Tile> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 416 |     pub fn get_enemy_at(&self, pos: &Position) -> Option<&Enemy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 420 |     pub fn get_enemy_at_mut(&mut self, pos: &Position) -> Option<&mut Enemy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 424 |     pub fn remove_enemy_at(&mut self, pos: &Position) -> Option<Enemy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 428 |     pub fn get_item_at(&self, pos: &Position) -> Option<&Item> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 444 |     pub fn remove_item_at(&mut self, pos: &Position) -> Option<Item> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TileType` is never used
[INFO] [stdout]  --> src/world/tile.rs:5:10
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub enum TileType {
[INFO] [stdout]   |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_walkable` and `symbol` are never used
[INFO] [stdout]   --> src/world/tile.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl TileType {
[INFO] [stdout]    | ------------- methods in this implementation
[INFO] [stdout] 16 |     pub fn is_walkable(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub fn symbol(&self) -> char {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Tile` is never constructed
[INFO] [stdout]   --> src/world/tile.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct Tile {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/world/tile.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl Tile {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 49 |     pub fn new(tile_type: TileType) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn wall() -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn floor() -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn door() -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn stairs_down() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn stairs_up() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn chest() -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn exit() -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn render(&self) -> char {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CombatAction` is never used
[INFO] [stdout]   --> src/combat/mod.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum CombatAction {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CombatResult` is never constructed
[INFO] [stdout]   --> src/combat/mod.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct CombatResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `add_message` are never used
[INFO] [stdout]   --> src/combat/mod.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl CombatResult {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 31 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn add_message(&mut self, message: impl Into<String>) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_combat_turn` is never used
[INFO] [stdout]   --> src/combat/mod.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn process_combat_turn(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_enemy_defeat` is never used
[INFO] [stdout]    --> src/combat/mod.rs:170:4
[INFO] [stdout]     |
[INFO] [stdout] 170 | fn handle_enemy_defeat(player: &mut Player, enemy: &Enemy, result: &mut CombatResult) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_terminal` is never used
[INFO] [stdout]   --> src/platform.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn init_terminal() -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cleanup_terminal` is never used
[INFO] [stdout]   --> src/platform.rs:42:8
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub fn cleanup_terminal() -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_terminal_size` is never used
[INFO] [stdout]   --> src/platform.rs:58:8
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub fn get_terminal_size() -> (u16, u16) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clear_screen` is never used
[INFO] [stdout]   --> src/platform.rs:75:8
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub fn clear_screen() -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `check_terminal_compatibility` is never used
[INFO] [stdout]   --> src/platform.rs:96:8
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub fn check_terminal_compatibility() -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_error` is never used
[INFO] [stdout]    --> src/platform.rs:109:8
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub fn handle_error(error: &anyhow::Error) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_platform_info` is never used
[INFO] [stdout]    --> src/platform.rs:122:8
[INFO] [stdout]     |
[INFO] [stdout] 122 | pub fn get_platform_info() -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_troubleshooting_tips` is never used
[INFO] [stdout]    --> src/platform.rs:133:4
[INFO] [stdout]     |
[INFO] [stdout] 133 | fn get_troubleshooting_tips() -> &'static str {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_welcome_message` is never used
[INFO] [stdout]    --> src/platform.rs:160:8
[INFO] [stdout]     |
[INFO] [stdout] 160 | pub fn show_welcome_message() -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize_key_event` is never used
[INFO] [stdout]    --> src/platform.rs:207:8
[INFO] [stdout]     |
[INFO] [stdout] 207 | pub fn normalize_key_event(key_event: crossterm::event::KeyEvent) -> crossterm::event::KeyEvent {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_cmd_fullscreen` is never used
[INFO] [stdout]    --> src/platform.rs:306:8
[INFO] [stdout]     |
[INFO] [stdout] 306 | pub fn set_cmd_fullscreen() -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_terminal_compatible` is never used
[INFO] [stdout]    --> src/platform.rs:373:8
[INFO] [stdout]     |
[INFO] [stdout] 373 | pub fn is_terminal_compatible() -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_recommended_size` is never used
[INFO] [stdout]    --> src/platform.rs:389:8
[INFO] [stdout]     |
[INFO] [stdout] 389 | pub fn get_recommended_size() -> (u16, u16) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_terminal_size_adequate` is never used
[INFO] [stdout]    --> src/platform.rs:395:8
[INFO] [stdout]     |
[INFO] [stdout] 395 | pub fn is_terminal_size_adequate() -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SCREEN_HEIGHT` is never used
[INFO] [stdout]   --> src/ui/mod.rs:30:7
[INFO] [stdout]    |
[INFO] [stdout] 30 | const SCREEN_HEIGHT: usize = 35;
[INFO] [stdout]    |       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAP_WIDTH` is never used
[INFO] [stdout]   --> src/ui/mod.rs:32:7
[INFO] [stdout]    |
[INFO] [stdout] 32 | const MAP_WIDTH: usize = 70;
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAP_HEIGHT` is never used
[INFO] [stdout]   --> src/ui/mod.rs:34:7
[INFO] [stdout]    |
[INFO] [stdout] 34 | const MAP_HEIGHT: usize = 25;
[INFO] [stdout]    |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `UI_PANEL_WIDTH` is never used
[INFO] [stdout]   --> src/ui/mod.rs:36:7
[INFO] [stdout]    |
[INFO] [stdout] 36 | const UI_PANEL_WIDTH: usize = 35; // Increased panel width for better readability
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BORDER_PADDING` is never used
[INFO] [stdout]   --> src/ui/mod.rs:38:7
[INFO] [stdout]    |
[INFO] [stdout] 38 | const BORDER_PADDING: usize = 4; // Increased padding inside the border
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_fog_of_war` is never used
[INFO] [stdout]   --> src/ui/mod.rs:42:4
[INFO] [stdout]    |
[INFO] [stdout] 42 | fn create_fog_of_war() -> FogOfWar {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UI` is never constructed
[INFO] [stdout]   --> src/ui/mod.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct UI {
[INFO] [stdout]    |            ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]     --> src/ui/mod.rs:54:12
[INFO] [stdout]      |
[INFO] [stdout]   53 | impl UI {
[INFO] [stdout]      | ------- associated items in this implementation
[INFO] [stdout]   54 |     pub fn new() -> Self {
[INFO] [stdout]      |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]   61 |     pub fn show_combat_tutorial(&mut self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  373 |     pub fn initialize(&mut self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  378 |     pub fn cleanup(&self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  385 |     pub fn clear_screen(&mut self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  390 |     pub fn add_message(&mut self, message: String) {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  397 |     pub fn clear_messages(&mut self) {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  401 |     pub fn add_messages_from_combat(&mut self, result: &CombatResult) {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  407 |     pub fn draw_title_screen(&mut self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  453 |     pub fn character_creation(&mut self) -> io::Result<Player> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  464 |     fn get_character_name(&mut self) -> io::Result<String> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  565 |     fn choose_character_class(&mut self) -> io::Result<ClassType> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  633 |     fn flush_input_buffer(&mut self) -> io::Result<()> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  645 |     pub fn draw_game_screen(
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1105 |     fn draw_game_border(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1207 |     pub fn draw_inventory_screen(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1256 |     pub fn draw_character_screen(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1334 |     pub fn draw_combat_screen(&mut self, player: &Player, enemy: &Enemy) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1388 |     pub fn draw_ability_selection(&mut self, player: &Player) -> io::Result<usize> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1456 |     pub fn draw_item_selection(&mut self, player: &Player) -> io::Result<usize> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1532 |     pub fn handle_combat_action(&mut self, player: &Player) -> io::Result<CombatAction> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1562 |     pub fn wait_for_key(&mut self) -> io::Result<KeyEvent> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1690 |     pub fn draw_game_over(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1737 |     pub fn draw_victory_screen(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `GameState` is never used
[INFO] [stdout]   --> src/game/mod.rs:30:10
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub enum GameState {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Game` is never constructed
[INFO] [stdout]   --> src/game/mod.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct Game {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/game/mod.rs:53:12
[INFO] [stdout]     |
[INFO] [stdout]  52 | impl Game {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout]  53 |     pub fn new(player: Player) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn current_dungeon(&self) -> &Dungeon {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn current_dungeon_mut(&mut self) -> &mut Dungeon {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  81 |     pub fn current_level(&self) -> &Level {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn current_level_mut(&mut self) -> &mut Level {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn player_position(&self) -> Position {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn move_player(&mut self, dx: i32, dy: i32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn process_turn(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub fn update_visibility(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn try_get_item(&mut self) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run` is never used
[INFO] [stdout]    --> src/game/mod.rs:383:8
[INFO] [stdout]     |
[INFO] [stdout] 383 | pub fn run() {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 22.56s
[INFO] running `Command { std: "docker" "inspect" "dc083153141b36bb2988c2c76d9c063166389af63d8807af45aaf8d6a4735c8d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "dc083153141b36bb2988c2c76d9c063166389af63d8807af45aaf8d6a4735c8d", kill_on_drop: false }`
[INFO] [stdout] dc083153141b36bb2988c2c76d9c063166389af63d8807af45aaf8d6a4735c8d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] cb52ab9bebf476333e3ccdf66ce95b86e2ee5329bbcb1a96fb05867c7e68febc
[INFO] running `Command { std: "docker" "start" "-a" "cb52ab9bebf476333e3ccdf66ce95b86e2ee5329bbcb1a96fb05867c7e68febc", kill_on_drop: false }`
[INFO] [stdout] warning: enum `ClassType` is never used
[INFO] [stdout]  --> src/character/class.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum ClassType {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Class` is never constructed
[INFO] [stdout]   --> src/character/class.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct Class {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `base_stats`, `level_up_stats`, and `use_ability` are never used
[INFO] [stdout]    --> src/character/class.rs:31:12
[INFO] [stdout]     |
[INFO] [stdout]  30 | impl Class {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout]  31 |     pub fn new(class_type: ClassType) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  45 |     pub fn base_stats(&self) -> Stats {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn level_up_stats(&self, stats: &mut Stats) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn use_ability(&self, ability_index: usize) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Player` is never constructed
[INFO] [stdout]  --> src/character/player.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct Player {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/character/player.rs:22:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl Player {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout]  22 |     pub fn new(name: String, class_type: ClassType) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn gain_experience(&mut self, exp: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  55 |     pub fn level_up(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn heal(&mut self, amount: i32) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     pub fn is_alive(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn attack_damage(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn defense(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn take_damage(&mut self, amount: i32) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn use_ability(&mut self, ability_index: usize) -> Result<String, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `StatType` is never used
[INFO] [stdout]  --> src/character/stats.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum StatType {
[INFO] [stdout]   |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Stats` is never constructed
[INFO] [stdout]   --> src/character/stats.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct Stats {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/character/stats.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl Stats {
[INFO] [stdout]    | ---------- associated items in this implementation
[INFO] [stdout] 22 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn modify_stat(&mut self, stat_type: StatType, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn set_strength(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn set_intelligence(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn set_dexterity(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn set_constitution(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn set_wisdom(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn increase_strength(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn increase_intelligence(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     pub fn increase_dexterity(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn increase_constitution(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn increase_wisdom(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ItemInfo` is never constructed
[INFO] [stdout]   --> src/inventory/mod.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct ItemInfo {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ActionResult` is never constructed
[INFO] [stdout]   --> src/inventory/mod.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct ActionResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `success`, `success_consumed`, and `failure` are never used
[INFO] [stdout]   --> src/inventory/mod.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | impl ActionResult {
[INFO] [stdout]    | ----------------- associated functions in this implementation
[INFO] [stdout] 74 |     pub fn success(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn success_consumed(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 88 |     pub fn failure(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Inventory` is never constructed
[INFO] [stdout]   --> src/inventory/manager.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Inventory {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `add_item`, `equip_item`, `get_equipped_weapon`, and `get_total_armor_defense` are never used
[INFO] [stdout]   --> src/inventory/manager.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Inventory {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(max_size: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn add_item(&mut self, item: Item) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn equip_item(&mut self, index: usize) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn get_equipped_weapon(&self) -> Option<&Equipment> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn get_total_armor_defense(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `InventoryManager` is never constructed
[INFO] [stdout]   --> src/inventory/manager.rs:97:12
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub struct InventoryManager;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/inventory/manager.rs:101:12
[INFO] [stdout]     |
[INFO] [stdout]  99 | impl InventoryManager {
[INFO] [stdout]     | --------------------- associated functions in this implementation
[INFO] [stdout] 100 |     /// Get all items in the inventory with display information
[INFO] [stdout] 101 |     pub fn get_items(player: &Player) -> Vec<ItemInfo> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn is_empty(player: &Player) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn use_item(player: &mut Player, index: usize) -> ActionResult {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     fn equip_item(
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     fn use_consumable(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn add_item(player: &mut Player, item: Item) -> ActionResult {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 206 |     pub fn get_item(player: &Player, index: usize) -> Option<&Item> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn get_item_count(player: &Player) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Item` is never used
[INFO] [stdout]   --> src/item/mod.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum Item {
[INFO] [stdout]    |          ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `name`, `generate_random`, and `generate_for_chest` are never used
[INFO] [stdout]   --> src/item/mod.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl Item {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 23 |     pub fn name(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn generate_random(level: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn generate_for_chest(level: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ConsumableType` is never used
[INFO] [stdout]  --> src/item/consumable.rs:7:10
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum ConsumableType {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Consumable` is never constructed
[INFO] [stdout]   --> src/item/consumable.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct Consumable {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `use_effect` and `generate_random` are never used
[INFO] [stdout]   --> src/item/consumable.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl Consumable {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 28 |     pub fn use_effect(&self, player: &mut Player) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn generate_random(level: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EquipmentSlot` is never used
[INFO] [stdout]  --> src/item/equipment.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub enum EquipmentSlot {
[INFO] [stdout]   |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `iter` is never used
[INFO] [stdout]   --> src/item/equipment.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl EquipmentSlot {
[INFO] [stdout]    | ------------------ associated function in this implementation
[INFO] [stdout] 18 |     pub fn iter() -> impl Iterator<Item = EquipmentSlot> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EquipmentType` is never used
[INFO] [stdout]   --> src/item/equipment.rs:45:10
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub enum EquipmentType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Equipment` is never constructed
[INFO] [stdout]   --> src/item/equipment.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct Equipment {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `generate_random` is never used
[INFO] [stdout]   --> src/item/equipment.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 62 | impl Equipment {
[INFO] [stdout]    | -------------- associated function in this implementation
[INFO] [stdout] 63 |     pub fn generate_random(level: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `random` is never used
[INFO] [stdout]   --> src/world/mod.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl DungeonType {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn random() -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Dungeon` is never constructed
[INFO] [stdout]   --> src/world/mod.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct Dungeon {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/world/mod.rs:67:12
[INFO] [stdout]     |
[INFO] [stdout]  66 | impl Dungeon {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout]  67 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn generate_random(player_level: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn current_level(&self) -> &Level {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn current_level_mut(&mut self) -> &mut Level {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn go_to_next_level(&mut self) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub fn go_to_previous_level(&mut self) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn is_final_level(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EnemyType` is never used
[INFO] [stdout]  --> src/world/enemy.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum EnemyType {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_base_stats`, `description`, and `get_level_range` are never used
[INFO] [stdout]    --> src/world/enemy.rs:24:12
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl EnemyType {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout]  24 |     pub fn get_base_stats(&self) -> Stats {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn description(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn get_level_range(&self) -> Range<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Enemy` is never constructed
[INFO] [stdout]    --> src/world/enemy.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub struct Enemy {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/world/enemy.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 151 | impl Enemy {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout] 152 |     pub fn new(name: String, enemy_type: EnemyType, level: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 223 |     pub fn generate_random(level: u32, difficulty: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn attack_damage(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub fn defense(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 327 |     pub fn take_damage(&mut self, amount: i32) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 336 |     pub fn is_alive(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 340 |     pub fn get_drops(&self) -> (u32, u32, Option<Item>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_standard_fog_of_war` is never used
[INFO] [stdout]   --> src/world/fog_factory.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub fn create_standard_fog_of_war() -> FogOfWar {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `VisibilityState` is never used
[INFO] [stdout]   --> src/world/fog_of_war.rs:11:10
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub enum VisibilityState {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FogColor` is never constructed
[INFO] [stdout]   --> src/world/fog_of_war.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub struct FogColor {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `BLACK`, `WHITE`, `DARK_GREY`, `GREY`, and `dimmed` are never used
[INFO] [stdout]   --> src/world/fog_of_war.rs:30:15
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl FogColor {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 30 |     pub const BLACK: Self = Self {
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub const WHITE: Self = Self {
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub const DARK_GREY: Self = Self {
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub const GREY: Self = Self {
[INFO] [stdout]    |               ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub fn dimmed(&self, factor: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FogOfWarConfig` is never constructed
[INFO] [stdout]   --> src/world/fog_of_war.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct FogOfWarConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FogRenderResult` is never constructed
[INFO] [stdout]   --> src/world/fog_of_war.rs:92:12
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub struct FogRenderResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FogOfWar` is never constructed
[INFO] [stdout]    --> src/world/fog_of_war.rs:102:12
[INFO] [stdout]     |
[INFO] [stdout] 102 | pub struct FogOfWar {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get_visibility_state`, `process_tile`, `process_position`, and `get_tile_color` are never used
[INFO] [stdout]    --> src/world/fog_of_war.rs:108:12
[INFO] [stdout]     |
[INFO] [stdout] 106 | impl FogOfWar {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout] 107 |     /// Create a new fog of war processor with the given configuration
[INFO] [stdout] 108 |     pub fn new(config: FogOfWarConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn get_visibility_state(&self, tile: &Tile) -> VisibilityState {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn process_tile(
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn process_position(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     fn get_tile_color(&self, tile_type: &crate::world::TileType) -> FogColor {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `to_terminal_color` is never used
[INFO] [stdout]    --> src/world/fog_of_war.rs:312:12
[INFO] [stdout]     |
[INFO] [stdout] 300 | impl FogOfWar {
[INFO] [stdout]     | ------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 312 |     pub fn to_terminal_color(color: &FogColor) -> crossterm::style::Color {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAP_WIDTH` is never used
[INFO] [stdout]  --> src/world/level.rs:7:7
[INFO] [stdout]   |
[INFO] [stdout] 7 | const MAP_WIDTH: usize = 80;
[INFO] [stdout]   |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAP_HEIGHT` is never used
[INFO] [stdout]  --> src/world/level.rs:8:7
[INFO] [stdout]   |
[INFO] [stdout] 8 | const MAP_HEIGHT: usize = 45;
[INFO] [stdout]   |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Position` is never constructed
[INFO] [stdout]   --> src/world/level.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Position {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/world/level.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl Position {
[INFO] [stdout]    | ------------- associated function in this implementation
[INFO] [stdout] 17 |     pub fn new(x: i32, y: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Room` is never constructed
[INFO] [stdout]   --> src/world/level.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct Room {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `center`, `intersects`, `width`, and `height` are never used
[INFO] [stdout]   --> src/world/level.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl Room {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 31 |     pub fn new(x: i32, y: i32, width: i32, height: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn center(&self) -> Position {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn intersects(&self, other: &Room) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn width(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn height(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Level` is never constructed
[INFO] [stdout]   --> src/world/level.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct Level {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/world/level.rs:75:12
[INFO] [stdout]     |
[INFO] [stdout]  74 | impl Level {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout]  75 |     pub fn new(width: usize, height: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn generate(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     fn create_room(&mut self, room: &Room) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     fn create_horizontal_tunnel(&mut self, x1: i32, x2: i32, y: i32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     fn create_vertical_tunnel(&mut self, y1: i32, y2: i32, x: i32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     fn place_doors(&mut self, room: &Room) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 267 |     fn is_valid_door_position(&self, x: i32, y: i32) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 291 |     fn place_enemies(&mut self, difficulty: u32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 322 |     fn place_items(&mut self, _difficulty: u32) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     pub fn is_position_valid(&self, x: i32, y: i32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 393 |     pub fn is_tile_walkable(&self, pos: Position) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 400 |     pub fn get_tile(&self, x: i32, y: i32) -> Option<&Tile> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 408 |     pub fn get_tile_mut(&mut self, x: i32, y: i32) -> Option<&mut Tile> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 416 |     pub fn get_enemy_at(&self, pos: &Position) -> Option<&Enemy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 420 |     pub fn get_enemy_at_mut(&mut self, pos: &Position) -> Option<&mut Enemy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 424 |     pub fn remove_enemy_at(&mut self, pos: &Position) -> Option<Enemy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 428 |     pub fn get_item_at(&self, pos: &Position) -> Option<&Item> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 444 |     pub fn remove_item_at(&mut self, pos: &Position) -> Option<Item> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TileType` is never used
[INFO] [stdout]  --> src/world/tile.rs:5:10
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub enum TileType {
[INFO] [stdout]   |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_walkable` and `symbol` are never used
[INFO] [stdout]   --> src/world/tile.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl TileType {
[INFO] [stdout]    | ------------- methods in this implementation
[INFO] [stdout] 16 |     pub fn is_walkable(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub fn symbol(&self) -> char {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Tile` is never constructed
[INFO] [stdout]   --> src/world/tile.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct Tile {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/world/tile.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl Tile {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 49 |     pub fn new(tile_type: TileType) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn wall() -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn floor() -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn door() -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn stairs_down() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn stairs_up() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn chest() -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn exit() -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn render(&self) -> char {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CombatAction` is never used
[INFO] [stdout]   --> src/combat/mod.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum CombatAction {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CombatResult` is never constructed
[INFO] [stdout]   --> src/combat/mod.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct CombatResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `add_message` are never used
[INFO] [stdout]   --> src/combat/mod.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl CombatResult {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 31 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn add_message(&mut self, message: impl Into<String>) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_combat_turn` is never used
[INFO] [stdout]   --> src/combat/mod.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn process_combat_turn(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_enemy_defeat` is never used
[INFO] [stdout]    --> src/combat/mod.rs:170:4
[INFO] [stdout]     |
[INFO] [stdout] 170 | fn handle_enemy_defeat(player: &mut Player, enemy: &Enemy, result: &mut CombatResult) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_terminal` is never used
[INFO] [stdout]   --> src/platform.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn init_terminal() -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cleanup_terminal` is never used
[INFO] [stdout]   --> src/platform.rs:42:8
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub fn cleanup_terminal() -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_terminal_size` is never used
[INFO] [stdout]   --> src/platform.rs:58:8
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub fn get_terminal_size() -> (u16, u16) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clear_screen` is never used
[INFO] [stdout]   --> src/platform.rs:75:8
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub fn clear_screen() -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `check_terminal_compatibility` is never used
[INFO] [stdout]   --> src/platform.rs:96:8
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub fn check_terminal_compatibility() -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_error` is never used
[INFO] [stdout]    --> src/platform.rs:109:8
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub fn handle_error(error: &anyhow::Error) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_platform_info` is never used
[INFO] [stdout]    --> src/platform.rs:122:8
[INFO] [stdout]     |
[INFO] [stdout] 122 | pub fn get_platform_info() -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_troubleshooting_tips` is never used
[INFO] [stdout]    --> src/platform.rs:133:4
[INFO] [stdout]     |
[INFO] [stdout] 133 | fn get_troubleshooting_tips() -> &'static str {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_welcome_message` is never used
[INFO] [stdout]    --> src/platform.rs:160:8
[INFO] [stdout]     |
[INFO] [stdout] 160 | pub fn show_welcome_message() -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize_key_event` is never used
[INFO] [stdout]    --> src/platform.rs:207:8
[INFO] [stdout]     |
[INFO] [stdout] 207 | pub fn normalize_key_event(key_event: crossterm::event::KeyEvent) -> crossterm::event::KeyEvent {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_cmd_fullscreen` is never used
[INFO] [stdout]    --> src/platform.rs:306:8
[INFO] [stdout]     |
[INFO] [stdout] 306 | pub fn set_cmd_fullscreen() -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_terminal_compatible` is never used
[INFO] [stdout]    --> src/platform.rs:373:8
[INFO] [stdout]     |
[INFO] [stdout] 373 | pub fn is_terminal_compatible() -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_recommended_size` is never used
[INFO] [stdout]    --> src/platform.rs:389:8
[INFO] [stdout]     |
[INFO] [stdout] 389 | pub fn get_recommended_size() -> (u16, u16) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_terminal_size_adequate` is never used
[INFO] [stdout]    --> src/platform.rs:395:8
[INFO] [stdout]     |
[INFO] [stdout] 395 | pub fn is_terminal_size_adequate() -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SCREEN_HEIGHT` is never used
[INFO] [stdout]   --> src/ui/mod.rs:30:7
[INFO] [stdout]    |
[INFO] [stdout] 30 | const SCREEN_HEIGHT: usize = 35;
[INFO] [stdout]    |       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAP_WIDTH` is never used
[INFO] [stdout]   --> src/ui/mod.rs:32:7
[INFO] [stdout]    |
[INFO] [stdout] 32 | const MAP_WIDTH: usize = 70;
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAP_HEIGHT` is never used
[INFO] [stdout]   --> src/ui/mod.rs:34:7
[INFO] [stdout]    |
[INFO] [stdout] 34 | const MAP_HEIGHT: usize = 25;
[INFO] [stdout]    |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `UI_PANEL_WIDTH` is never used
[INFO] [stdout]   --> src/ui/mod.rs:36:7
[INFO] [stdout]    |
[INFO] [stdout] 36 | const UI_PANEL_WIDTH: usize = 35; // Increased panel width for better readability
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BORDER_PADDING` is never used
[INFO] [stdout]   --> src/ui/mod.rs:38:7
[INFO] [stdout]    |
[INFO] [stdout] 38 | const BORDER_PADDING: usize = 4; // Increased padding inside the border
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_fog_of_war` is never used
[INFO] [stdout]   --> src/ui/mod.rs:42:4
[INFO] [stdout]    |
[INFO] [stdout] 42 | fn create_fog_of_war() -> FogOfWar {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UI` is never constructed
[INFO] [stdout]   --> src/ui/mod.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct UI {
[INFO] [stdout]    |            ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]     --> src/ui/mod.rs:54:12
[INFO] [stdout]      |
[INFO] [stdout]   53 | impl UI {
[INFO] [stdout]      | ------- associated items in this implementation
[INFO] [stdout]   54 |     pub fn new() -> Self {
[INFO] [stdout]      |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]   61 |     pub fn show_combat_tutorial(&mut self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  373 |     pub fn initialize(&mut self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  378 |     pub fn cleanup(&self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  385 |     pub fn clear_screen(&mut self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  390 |     pub fn add_message(&mut self, message: String) {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  397 |     pub fn clear_messages(&mut self) {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  401 |     pub fn add_messages_from_combat(&mut self, result: &CombatResult) {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  407 |     pub fn draw_title_screen(&mut self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  453 |     pub fn character_creation(&mut self) -> io::Result<Player> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  464 |     fn get_character_name(&mut self) -> io::Result<String> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  565 |     fn choose_character_class(&mut self) -> io::Result<ClassType> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  633 |     fn flush_input_buffer(&mut self) -> io::Result<()> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  645 |     pub fn draw_game_screen(
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1105 |     fn draw_game_border(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1207 |     pub fn draw_inventory_screen(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1256 |     pub fn draw_character_screen(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1334 |     pub fn draw_combat_screen(&mut self, player: &Player, enemy: &Enemy) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1388 |     pub fn draw_ability_selection(&mut self, player: &Player) -> io::Result<usize> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1456 |     pub fn draw_item_selection(&mut self, player: &Player) -> io::Result<usize> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1532 |     pub fn handle_combat_action(&mut self, player: &Player) -> io::Result<CombatAction> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1562 |     pub fn wait_for_key(&mut self) -> io::Result<KeyEvent> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1690 |     pub fn draw_game_over(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1737 |     pub fn draw_victory_screen(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `GameState` is never used
[INFO] [stdout]   --> src/game/mod.rs:30:10
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub enum GameState {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Game` is never constructed
[INFO] [stdout]   --> src/game/mod.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct Game {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/game/mod.rs:53:12
[INFO] [stdout]     |
[INFO] [stdout]  52 | impl Game {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout]  53 |     pub fn new(player: Player) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn current_dungeon(&self) -> &Dungeon {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn current_dungeon_mut(&mut self) -> &mut Dungeon {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  81 |     pub fn current_level(&self) -> &Level {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn current_level_mut(&mut self) -> &mut Level {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn player_position(&self) -> Position {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn move_player(&mut self, dx: i32, dy: i32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn process_turn(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub fn update_visibility(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn try_get_item(&mut self) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run` is never used
[INFO] [stdout]    --> src/game/mod.rs:383:8
[INFO] [stdout]     |
[INFO] [stdout] 383 | pub fn run() {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling echoes_rpg v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: enum `ClassType` is never used
[INFO] [stdout]  --> src/character/class.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum ClassType {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Class` is never constructed
[INFO] [stdout]   --> src/character/class.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct Class {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `base_stats`, `level_up_stats`, and `use_ability` are never used
[INFO] [stdout]    --> src/character/class.rs:31:12
[INFO] [stdout]     |
[INFO] [stdout]  30 | impl Class {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout]  31 |     pub fn new(class_type: ClassType) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  45 |     pub fn base_stats(&self) -> Stats {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn level_up_stats(&self, stats: &mut Stats) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn use_ability(&self, ability_index: usize) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Player` is never constructed
[INFO] [stdout]  --> src/character/player.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct Player {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/character/player.rs:22:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl Player {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout]  22 |     pub fn new(name: String, class_type: ClassType) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn gain_experience(&mut self, exp: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  55 |     pub fn level_up(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn heal(&mut self, amount: i32) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     pub fn is_alive(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn attack_damage(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn defense(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn take_damage(&mut self, amount: i32) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn use_ability(&mut self, ability_index: usize) -> Result<String, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> src/character/stats.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl Stats {
[INFO] [stdout]    | ---------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn set_intelligence(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn set_dexterity(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn set_constitution(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn set_wisdom(&mut self, value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn increase_intelligence(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     pub fn increase_dexterity(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn increase_constitution(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn increase_wisdom(&mut self, amount: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ItemInfo` is never constructed
[INFO] [stdout]   --> src/inventory/mod.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct ItemInfo {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ActionResult` is never constructed
[INFO] [stdout]   --> src/inventory/mod.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct ActionResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `success`, `success_consumed`, and `failure` are never used
[INFO] [stdout]   --> src/inventory/mod.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | impl ActionResult {
[INFO] [stdout]    | ----------------- associated functions in this implementation
[INFO] [stdout] 74 |     pub fn success(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn success_consumed(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 88 |     pub fn failure(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Inventory` is never constructed
[INFO] [stdout]   --> src/inventory/manager.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Inventory {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `add_item`, `equip_item`, `get_equipped_weapon`, and `get_total_armor_defense` are never used
[INFO] [stdout]   --> src/inventory/manager.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Inventory {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(max_size: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn add_item(&mut self, item: Item) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn equip_item(&mut self, index: usize) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn get_equipped_weapon(&self) -> Option<&Equipment> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn get_total_armor_defense(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `InventoryManager` is never constructed
[INFO] [stdout]   --> src/inventory/manager.rs:97:12
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub struct InventoryManager;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/inventory/manager.rs:101:12
[INFO] [stdout]     |
[INFO] [stdout]  99 | impl InventoryManager {
[INFO] [stdout]     | --------------------- associated functions in this implementation
[INFO] [stdout] 100 |     /// Get all items in the inventory with display information
[INFO] [stdout] 101 |     pub fn get_items(player: &Player) -> Vec<ItemInfo> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn is_empty(player: &Player) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn use_item(player: &mut Player, index: usize) -> ActionResult {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     fn equip_item(
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     fn use_consumable(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn add_item(player: &mut Player, item: Item) -> ActionResult {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 206 |     pub fn get_item(player: &Player, index: usize) -> Option<&Item> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn get_item_count(player: &Player) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Item` is never used
[INFO] [stdout]   --> src/item/mod.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum Item {
[INFO] [stdout]    |          ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `name`, `generate_random`, and `generate_for_chest` are never used
[INFO] [stdout]   --> src/item/mod.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl Item {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 23 |     pub fn name(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn generate_random(level: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn generate_for_chest(level: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ConsumableType` is never used
[INFO] [stdout]  --> src/item/consumable.rs:7:10
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum ConsumableType {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Consumable` is never constructed
[INFO] [stdout]   --> src/item/consumable.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct Consumable {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `use_effect` and `generate_random` are never used
[INFO] [stdout]   --> src/item/consumable.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl Consumable {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 28 |     pub fn use_effect(&self, player: &mut Player) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn generate_random(level: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EquipmentSlot` is never used
[INFO] [stdout]  --> src/item/equipment.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub enum EquipmentSlot {
[INFO] [stdout]   |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `iter` is never used
[INFO] [stdout]   --> src/item/equipment.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl EquipmentSlot {
[INFO] [stdout]    | ------------------ associated function in this implementation
[INFO] [stdout] 18 |     pub fn iter() -> impl Iterator<Item = EquipmentSlot> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EquipmentType` is never used
[INFO] [stdout]   --> src/item/equipment.rs:45:10
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub enum EquipmentType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Equipment` is never constructed
[INFO] [stdout]   --> src/item/equipment.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct Equipment {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `generate_random` is never used
[INFO] [stdout]   --> src/item/equipment.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 62 | impl Equipment {
[INFO] [stdout]    | -------------- associated function in this implementation
[INFO] [stdout] 63 |     pub fn generate_random(level: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `random` is never used
[INFO] [stdout]   --> src/world/mod.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl DungeonType {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn random() -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Dungeon` is never constructed
[INFO] [stdout]   --> src/world/mod.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct Dungeon {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/world/mod.rs:67:12
[INFO] [stdout]     |
[INFO] [stdout]  66 | impl Dungeon {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout]  67 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn generate_random(player_level: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn current_level(&self) -> &Level {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn current_level_mut(&mut self) -> &mut Level {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn go_to_next_level(&mut self) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub fn go_to_previous_level(&mut self) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn is_final_level(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EnemyType` is never used
[INFO] [stdout]  --> src/world/enemy.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum EnemyType {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_base_stats`, `description`, and `get_level_range` are never used
[INFO] [stdout]    --> src/world/enemy.rs:24:12
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl EnemyType {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout]  24 |     pub fn get_base_stats(&self) -> Stats {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn description(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn get_level_range(&self) -> Range<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Enemy` is never constructed
[INFO] [stdout]    --> src/world/enemy.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub struct Enemy {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/world/enemy.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 151 | impl Enemy {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout] 152 |     pub fn new(name: String, enemy_type: EnemyType, level: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 223 |     pub fn generate_random(level: u32, difficulty: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn attack_damage(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub fn defense(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 327 |     pub fn take_damage(&mut self, amount: i32) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 336 |     pub fn is_alive(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 340 |     pub fn get_drops(&self) -> (u32, u32, Option<Item>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `process_position` and `get_tile_color` are never used
[INFO] [stdout]    --> src/world/fog_of_war.rs:191:12
[INFO] [stdout]     |
[INFO] [stdout] 106 | impl FogOfWar {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn process_position(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     fn get_tile_color(&self, tile_type: &crate::world::TileType) -> FogColor {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `to_terminal_color` is never used
[INFO] [stdout]    --> src/world/fog_of_war.rs:312:12
[INFO] [stdout]     |
[INFO] [stdout] 300 | impl FogOfWar {
[INFO] [stdout]     | ------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 312 |     pub fn to_terminal_color(color: &FogColor) -> crossterm::style::Color {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAP_WIDTH` is never used
[INFO] [stdout]  --> src/world/level.rs:7:7
[INFO] [stdout]   |
[INFO] [stdout] 7 | const MAP_WIDTH: usize = 80;
[INFO] [stdout]   |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAP_HEIGHT` is never used
[INFO] [stdout]  --> src/world/level.rs:8:7
[INFO] [stdout]   |
[INFO] [stdout] 8 | const MAP_HEIGHT: usize = 45;
[INFO] [stdout]   |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Position` is never constructed
[INFO] [stdout]   --> src/world/level.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Position {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/world/level.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl Position {
[INFO] [stdout]    | ------------- associated function in this implementation
[INFO] [stdout] 17 |     pub fn new(x: i32, y: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Room` is never constructed
[INFO] [stdout]   --> src/world/level.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct Room {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `center`, `intersects`, `width`, and `height` are never used
[INFO] [stdout]   --> src/world/level.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl Room {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 31 |     pub fn new(x: i32, y: i32, width: i32, height: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn center(&self) -> Position {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn intersects(&self, other: &Room) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn width(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn height(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Level` is never constructed
[INFO] [stdout]   --> src/world/level.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct Level {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/world/level.rs:75:12
[INFO] [stdout]     |
[INFO] [stdout]  74 | impl Level {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout]  75 |     pub fn new(width: usize, height: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn generate(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     fn create_room(&mut self, room: &Room) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     fn create_horizontal_tunnel(&mut self, x1: i32, x2: i32, y: i32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     fn create_vertical_tunnel(&mut self, y1: i32, y2: i32, x: i32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     fn place_doors(&mut self, room: &Room) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 267 |     fn is_valid_door_position(&self, x: i32, y: i32) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 291 |     fn place_enemies(&mut self, difficulty: u32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 322 |     fn place_items(&mut self, _difficulty: u32) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     pub fn is_position_valid(&self, x: i32, y: i32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 393 |     pub fn is_tile_walkable(&self, pos: Position) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 400 |     pub fn get_tile(&self, x: i32, y: i32) -> Option<&Tile> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 408 |     pub fn get_tile_mut(&mut self, x: i32, y: i32) -> Option<&mut Tile> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 416 |     pub fn get_enemy_at(&self, pos: &Position) -> Option<&Enemy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 420 |     pub fn get_enemy_at_mut(&mut self, pos: &Position) -> Option<&mut Enemy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 424 |     pub fn remove_enemy_at(&mut self, pos: &Position) -> Option<Enemy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 428 |     pub fn get_item_at(&self, pos: &Position) -> Option<&Item> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 444 |     pub fn remove_item_at(&mut self, pos: &Position) -> Option<Item> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_walkable` is never used
[INFO] [stdout]   --> src/world/tile.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl TileType {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] 16 |     pub fn is_walkable(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]   --> src/world/tile.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl Tile {
[INFO] [stdout]    | --------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn wall() -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn floor() -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn door() -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn stairs_down() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn stairs_up() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn chest() -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn exit() -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CombatAction` is never used
[INFO] [stdout]   --> src/combat/mod.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum CombatAction {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CombatResult` is never constructed
[INFO] [stdout]   --> src/combat/mod.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct CombatResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `add_message` are never used
[INFO] [stdout]   --> src/combat/mod.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl CombatResult {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 31 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn add_message(&mut self, message: impl Into<String>) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_combat_turn` is never used
[INFO] [stdout]   --> src/combat/mod.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn process_combat_turn(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_enemy_defeat` is never used
[INFO] [stdout]    --> src/combat/mod.rs:170:4
[INFO] [stdout]     |
[INFO] [stdout] 170 | fn handle_enemy_defeat(player: &mut Player, enemy: &Enemy, result: &mut CombatResult) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_terminal` is never used
[INFO] [stdout]   --> src/platform.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn init_terminal() -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cleanup_terminal` is never used
[INFO] [stdout]   --> src/platform.rs:42:8
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub fn cleanup_terminal() -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clear_screen` is never used
[INFO] [stdout]   --> src/platform.rs:75:8
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub fn clear_screen() -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `check_terminal_compatibility` is never used
[INFO] [stdout]   --> src/platform.rs:96:8
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub fn check_terminal_compatibility() -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_error` is never used
[INFO] [stdout]    --> src/platform.rs:109:8
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub fn handle_error(error: &anyhow::Error) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_troubleshooting_tips` is never used
[INFO] [stdout]    --> src/platform.rs:133:4
[INFO] [stdout]     |
[INFO] [stdout] 133 | fn get_troubleshooting_tips() -> &'static str {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_welcome_message` is never used
[INFO] [stdout]    --> src/platform.rs:160:8
[INFO] [stdout]     |
[INFO] [stdout] 160 | pub fn show_welcome_message() -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize_key_event` is never used
[INFO] [stdout]    --> src/platform.rs:207:8
[INFO] [stdout]     |
[INFO] [stdout] 207 | pub fn normalize_key_event(key_event: crossterm::event::KeyEvent) -> crossterm::event::KeyEvent {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_cmd_fullscreen` is never used
[INFO] [stdout]    --> src/platform.rs:306:8
[INFO] [stdout]     |
[INFO] [stdout] 306 | pub fn set_cmd_fullscreen() -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_recommended_size` is never used
[INFO] [stdout]    --> src/platform.rs:389:8
[INFO] [stdout]     |
[INFO] [stdout] 389 | pub fn get_recommended_size() -> (u16, u16) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_terminal_size_adequate` is never used
[INFO] [stdout]    --> src/platform.rs:395:8
[INFO] [stdout]     |
[INFO] [stdout] 395 | pub fn is_terminal_size_adequate() -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SCREEN_HEIGHT` is never used
[INFO] [stdout]   --> src/ui/mod.rs:30:7
[INFO] [stdout]    |
[INFO] [stdout] 30 | const SCREEN_HEIGHT: usize = 35;
[INFO] [stdout]    |       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAP_WIDTH` is never used
[INFO] [stdout]   --> src/ui/mod.rs:32:7
[INFO] [stdout]    |
[INFO] [stdout] 32 | const MAP_WIDTH: usize = 70;
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAP_HEIGHT` is never used
[INFO] [stdout]   --> src/ui/mod.rs:34:7
[INFO] [stdout]    |
[INFO] [stdout] 34 | const MAP_HEIGHT: usize = 25;
[INFO] [stdout]    |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `UI_PANEL_WIDTH` is never used
[INFO] [stdout]   --> src/ui/mod.rs:36:7
[INFO] [stdout]    |
[INFO] [stdout] 36 | const UI_PANEL_WIDTH: usize = 35; // Increased panel width for better readability
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BORDER_PADDING` is never used
[INFO] [stdout]   --> src/ui/mod.rs:38:7
[INFO] [stdout]    |
[INFO] [stdout] 38 | const BORDER_PADDING: usize = 4; // Increased padding inside the border
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_fog_of_war` is never used
[INFO] [stdout]   --> src/ui/mod.rs:42:4
[INFO] [stdout]    |
[INFO] [stdout] 42 | fn create_fog_of_war() -> FogOfWar {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UI` is never constructed
[INFO] [stdout]   --> src/ui/mod.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct UI {
[INFO] [stdout]    |            ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]     --> src/ui/mod.rs:54:12
[INFO] [stdout]      |
[INFO] [stdout]   53 | impl UI {
[INFO] [stdout]      | ------- associated items in this implementation
[INFO] [stdout]   54 |     pub fn new() -> Self {
[INFO] [stdout]      |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]   61 |     pub fn show_combat_tutorial(&mut self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  373 |     pub fn initialize(&mut self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  378 |     pub fn cleanup(&self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  385 |     pub fn clear_screen(&mut self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  390 |     pub fn add_message(&mut self, message: String) {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  397 |     pub fn clear_messages(&mut self) {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  401 |     pub fn add_messages_from_combat(&mut self, result: &CombatResult) {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  407 |     pub fn draw_title_screen(&mut self) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  453 |     pub fn character_creation(&mut self) -> io::Result<Player> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  464 |     fn get_character_name(&mut self) -> io::Result<String> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  565 |     fn choose_character_class(&mut self) -> io::Result<ClassType> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  633 |     fn flush_input_buffer(&mut self) -> io::Result<()> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  645 |     pub fn draw_game_screen(
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1105 |     fn draw_game_border(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1207 |     pub fn draw_inventory_screen(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1256 |     pub fn draw_character_screen(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1334 |     pub fn draw_combat_screen(&mut self, player: &Player, enemy: &Enemy) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1388 |     pub fn draw_ability_selection(&mut self, player: &Player) -> io::Result<usize> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1456 |     pub fn draw_item_selection(&mut self, player: &Player) -> io::Result<usize> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1532 |     pub fn handle_combat_action(&mut self, player: &Player) -> io::Result<CombatAction> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1562 |     pub fn wait_for_key(&mut self) -> io::Result<KeyEvent> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1690 |     pub fn draw_game_over(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1737 |     pub fn draw_victory_screen(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `GameState` is never used
[INFO] [stdout]   --> src/game/mod.rs:30:10
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub enum GameState {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Game` is never constructed
[INFO] [stdout]   --> src/game/mod.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct Game {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/game/mod.rs:53:12
[INFO] [stdout]     |
[INFO] [stdout]  52 | impl Game {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout]  53 |     pub fn new(player: Player) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn current_dungeon(&self) -> &Dungeon {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn current_dungeon_mut(&mut self) -> &mut Dungeon {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  81 |     pub fn current_level(&self) -> &Level {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn current_level_mut(&mut self) -> &mut Level {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn player_position(&self) -> Position {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn move_player(&mut self, dx: i32, dy: i32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn process_turn(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub fn update_visibility(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn try_get_item(&mut self) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run` is never used
[INFO] [stdout]    --> src/game/mod.rs:383:8
[INFO] [stdout]     |
[INFO] [stdout] 383 | pub fn run() {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 3.18s
[INFO] running `Command { std: "docker" "inspect" "cb52ab9bebf476333e3ccdf66ce95b86e2ee5329bbcb1a96fb05867c7e68febc", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "cb52ab9bebf476333e3ccdf66ce95b86e2ee5329bbcb1a96fb05867c7e68febc", kill_on_drop: false }`
[INFO] [stdout] cb52ab9bebf476333e3ccdf66ce95b86e2ee5329bbcb1a96fb05867c7e68febc
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 114c0f15f63d373e69b025aadf6beb4a9d339a1b905188f61cde4806d3df9757
[INFO] running `Command { std: "docker" "start" "-a" "114c0f15f63d373e69b025aadf6beb4a9d339a1b905188f61cde4806d3df9757", kill_on_drop: false }`
[INFO] [stderr] warning: enum `ClassType` is never used
[INFO] [stderr]  --> src/character/class.rs:6:10
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub enum ClassType {
[INFO] [stderr]   |          ^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Class` is never constructed
[INFO] [stderr]   --> src/character/class.rs:25:12
[INFO] [stderr]    |
[INFO] [stderr] 25 | pub struct Class {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `base_stats`, `level_up_stats`, and `use_ability` are never used
[INFO] [stderr]    --> src/character/class.rs:31:12
[INFO] [stderr]     |
[INFO] [stderr]  30 | impl Class {
[INFO] [stderr]     | ---------- associated items in this implementation
[INFO] [stderr]  31 |     pub fn new(class_type: ClassType) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  45 |     pub fn base_stats(&self) -> Stats {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  82 |     pub fn level_up_stats(&self, stats: &mut Stats) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 143 |     pub fn use_ability(&self, ability_index: usize) -> Option<&str> {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Player` is never constructed
[INFO] [stderr]  --> src/character/player.rs:7:12
[INFO] [stderr]   |
[INFO] [stderr] 7 | pub struct Player {
[INFO] [stderr]   |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/character/player.rs:22:12
[INFO] [stderr]     |
[INFO] [stderr]  21 | impl Player {
[INFO] [stderr]     | ----------- associated items in this implementation
[INFO] [stderr]  22 |     pub fn new(name: String, class_type: ClassType) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  43 |     pub fn gain_experience(&mut self, exp: u32) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  55 |     pub fn level_up(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  68 |     pub fn heal(&mut self, amount: i32) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr]  72 |     pub fn is_alive(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  76 |     pub fn attack_damage(&self) -> i32 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  94 |     pub fn defense(&self) -> i32 {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 103 |     pub fn take_damage(&mut self, amount: i32) -> i32 {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 110 |     pub fn use_ability(&mut self, ability_index: usize) -> Result<String, String> {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `StatType` is never used
[INFO] [stderr]  --> src/character/stats.rs:4:10
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub enum StatType {
[INFO] [stderr]   |          ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Stats` is never constructed
[INFO] [stderr]   --> src/character/stats.rs:13:12
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub struct Stats {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]   --> src/character/stats.rs:22:12
[INFO] [stderr]    |
[INFO] [stderr] 21 | impl Stats {
[INFO] [stderr]    | ---------- associated items in this implementation
[INFO] [stderr] 22 |     pub fn new() -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 32 |     pub fn modify_stat(&mut self, stat_type: StatType, amount: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 43 |     pub fn set_strength(&mut self, value: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 47 |     pub fn set_intelligence(&mut self, value: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 51 |     pub fn set_dexterity(&mut self, value: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 55 |     pub fn set_constitution(&mut self, value: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 59 |     pub fn set_wisdom(&mut self, value: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 64 |     pub fn increase_strength(&mut self, amount: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 68 |     pub fn increase_intelligence(&mut self, amount: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 72 |     pub fn increase_dexterity(&mut self, amount: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 76 |     pub fn increase_constitution(&mut self, amount: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 80 |     pub fn increase_wisdom(&mut self, amount: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ItemInfo` is never constructed
[INFO] [stderr]   --> src/inventory/mod.rs:60:12
[INFO] [stderr]    |
[INFO] [stderr] 60 | pub struct ItemInfo {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ActionResult` is never constructed
[INFO] [stderr]   --> src/inventory/mod.rs:68:12
[INFO] [stderr]    |
[INFO] [stderr] 68 | pub struct ActionResult {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated functions `success`, `success_consumed`, and `failure` are never used
[INFO] [stderr]   --> src/inventory/mod.rs:74:12
[INFO] [stderr]    |
[INFO] [stderr] 73 | impl ActionResult {
[INFO] [stderr]    | ----------------- associated functions in this implementation
[INFO] [stderr] 74 |     pub fn success(message: impl Into<String>) -> Self {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 81 |     pub fn success_consumed(message: impl Into<String>) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 88 |     pub fn failure(message: impl Into<String>) -> Self {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Inventory` is never constructed
[INFO] [stderr]   --> src/inventory/manager.rs:11:12
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub struct Inventory {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `add_item`, `equip_item`, `get_equipped_weapon`, and `get_total_armor_defense` are never used
[INFO] [stderr]   --> src/inventory/manager.rs:18:12
[INFO] [stderr]    |
[INFO] [stderr] 17 | impl Inventory {
[INFO] [stderr]    | -------------- associated items in this implementation
[INFO] [stderr] 18 |     pub fn new(max_size: usize) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 31 |     pub fn add_item(&mut self, item: Item) -> Result<(), String> {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 40 |     pub fn equip_item(&mut self, index: usize) -> Result<(), String> {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 64 |     pub fn get_equipped_weapon(&self) -> Option<&Equipment> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 73 |     pub fn get_total_armor_defense(&self) -> i32 {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `InventoryManager` is never constructed
[INFO] [stderr]   --> src/inventory/manager.rs:97:12
[INFO] [stderr]    |
[INFO] [stderr] 97 | pub struct InventoryManager;
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated functions are never used
[INFO] [stderr]    --> src/inventory/manager.rs:101:12
[INFO] [stderr]     |
[INFO] [stderr]  99 | impl InventoryManager {
[INFO] [stderr]     | --------------------- associated functions in this implementation
[INFO] [stderr] 100 |     /// Get all items in the inventory with display information
[INFO] [stderr] 101 |     pub fn get_items(player: &Player) -> Vec<ItemInfo> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 130 |     pub fn is_empty(player: &Player) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 135 |     pub fn use_item(player: &mut Player, index: usize) -> ActionResult {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 151 |     fn equip_item(
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 163 |     fn use_consumable(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 198 |     pub fn add_item(player: &mut Player, item: Item) -> ActionResult {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 206 |     pub fn get_item(player: &Player, index: usize) -> Option<&Item> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 211 |     pub fn get_item_count(player: &Player) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `Item` is never used
[INFO] [stderr]   --> src/item/mod.rs:12:10
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub enum Item {
[INFO] [stderr]    |          ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `name`, `generate_random`, and `generate_for_chest` are never used
[INFO] [stderr]   --> src/item/mod.rs:23:12
[INFO] [stderr]    |
[INFO] [stderr] 22 | impl Item {
[INFO] [stderr]    | --------- associated items in this implementation
[INFO] [stderr] 23 |     pub fn name(&self) -> &str {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 32 |     pub fn generate_random(level: u32) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 47 |     pub fn generate_for_chest(level: u32) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `ConsumableType` is never used
[INFO] [stderr]  --> src/item/consumable.rs:7:10
[INFO] [stderr]   |
[INFO] [stderr] 7 | pub enum ConsumableType {
[INFO] [stderr]   |          ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Consumable` is never constructed
[INFO] [stderr]   --> src/item/consumable.rs:19:12
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub struct Consumable {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `use_effect` and `generate_random` are never used
[INFO] [stderr]   --> src/item/consumable.rs:28:12
[INFO] [stderr]    |
[INFO] [stderr] 27 | impl Consumable {
[INFO] [stderr]    | --------------- associated items in this implementation
[INFO] [stderr] 28 |     pub fn use_effect(&self, player: &mut Player) -> String {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 74 |     pub fn generate_random(level: u32) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `EquipmentSlot` is never used
[INFO] [stderr]  --> src/item/equipment.rs:8:10
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub enum EquipmentSlot {
[INFO] [stderr]   |          ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `iter` is never used
[INFO] [stderr]   --> src/item/equipment.rs:18:12
[INFO] [stderr]    |
[INFO] [stderr] 17 | impl EquipmentSlot {
[INFO] [stderr]    | ------------------ associated function in this implementation
[INFO] [stderr] 18 |     pub fn iter() -> impl Iterator<Item = EquipmentSlot> {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `EquipmentType` is never used
[INFO] [stderr]   --> src/item/equipment.rs:45:10
[INFO] [stderr]    |
[INFO] [stderr] 45 | pub enum EquipmentType {
[INFO] [stderr]    |          ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Equipment` is never constructed
[INFO] [stderr]   --> src/item/equipment.rs:51:12
[INFO] [stderr]    |
[INFO] [stderr] 51 | pub struct Equipment {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `generate_random` is never used
[INFO] [stderr]   --> src/item/equipment.rs:63:12
[INFO] [stderr]    |
[INFO] [stderr] 62 | impl Equipment {
[INFO] [stderr]    | -------------- associated function in this implementation
[INFO] [stderr] 63 |     pub fn generate_random(level: u32) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `random` is never used
[INFO] [stderr]   --> src/world/mod.rs:46:12
[INFO] [stderr]    |
[INFO] [stderr] 27 | impl DungeonType {
[INFO] [stderr]    | ---------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 46 |     pub fn random() -> Self {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Dungeon` is never constructed
[INFO] [stderr]   --> src/world/mod.rs:58:12
[INFO] [stderr]    |
[INFO] [stderr] 58 | pub struct Dungeon {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/world/mod.rs:67:12
[INFO] [stderr]     |
[INFO] [stderr]  66 | impl Dungeon {
[INFO] [stderr]     | ------------ associated items in this implementation
[INFO] [stderr]  67 |     pub fn new(
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  94 |     pub fn generate_random(player_level: u32) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 139 |     pub fn current_level(&self) -> &Level {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 143 |     pub fn current_level_mut(&mut self) -> &mut Level {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 147 |     pub fn go_to_next_level(&mut self) -> Result<(), String> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 156 |     pub fn go_to_previous_level(&mut self) -> Result<(), String> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 165 |     pub fn is_final_level(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `EnemyType` is never used
[INFO] [stderr]  --> src/world/enemy.rs:9:10
[INFO] [stderr]   |
[INFO] [stderr] 9 | pub enum EnemyType {
[INFO] [stderr]   |          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_base_stats`, `description`, and `get_level_range` are never used
[INFO] [stderr]    --> src/world/enemy.rs:24:12
[INFO] [stderr]     |
[INFO] [stderr]  23 | impl EnemyType {
[INFO] [stderr]     | -------------- methods in this implementation
[INFO] [stderr]  24 |     pub fn get_base_stats(&self) -> Stats {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 110 |     pub fn description(&self) -> &str {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 126 |     pub fn get_level_range(&self) -> Range<u32> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Enemy` is never constructed
[INFO] [stderr]    --> src/world/enemy.rs:139:12
[INFO] [stderr]     |
[INFO] [stderr] 139 | pub struct Enemy {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/world/enemy.rs:152:12
[INFO] [stderr]     |
[INFO] [stderr] 151 | impl Enemy {
[INFO] [stderr]     | ---------- associated items in this implementation
[INFO] [stderr] 152 |     pub fn new(name: String, enemy_type: EnemyType, level: u32) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 223 |     pub fn generate_random(level: u32, difficulty: u32) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 308 |     pub fn attack_damage(&self) -> i32 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 320 |     pub fn defense(&self) -> i32 {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 327 |     pub fn take_damage(&mut self, amount: i32) -> i32 {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 336 |     pub fn is_alive(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 340 |     pub fn get_drops(&self) -> (u32, u32, Option<Item>) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `create_standard_fog_of_war` is never used
[INFO] [stderr]   --> src/world/fog_factory.rs:13:8
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub fn create_standard_fog_of_war() -> FogOfWar {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `VisibilityState` is never used
[INFO] [stderr]   --> src/world/fog_of_war.rs:11:10
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub enum VisibilityState {
[INFO] [stderr]    |          ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `FogColor` is never constructed
[INFO] [stderr]   --> src/world/fog_of_war.rs:22:12
[INFO] [stderr]    |
[INFO] [stderr] 22 | pub struct FogColor {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `BLACK`, `WHITE`, `DARK_GREY`, `GREY`, and `dimmed` are never used
[INFO] [stderr]   --> src/world/fog_of_war.rs:30:15
[INFO] [stderr]    |
[INFO] [stderr] 29 | impl FogColor {
[INFO] [stderr]    | ------------- associated items in this implementation
[INFO] [stderr] 30 |     pub const BLACK: Self = Self {
[INFO] [stderr]    |               ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 36 |     pub const WHITE: Self = Self {
[INFO] [stderr]    |               ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 42 |     pub const DARK_GREY: Self = Self {
[INFO] [stderr]    |               ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 48 |     pub const GREY: Self = Self {
[INFO] [stderr]    |               ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 56 |     pub fn dimmed(&self, factor: f32) -> Self {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `FogOfWarConfig` is never constructed
[INFO] [stderr]   --> src/world/fog_of_war.rs:68:12
[INFO] [stderr]    |
[INFO] [stderr] 68 | pub struct FogOfWarConfig {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `FogRenderResult` is never constructed
[INFO] [stderr]   --> src/world/fog_of_war.rs:92:12
[INFO] [stderr]    |
[INFO] [stderr] 92 | pub struct FogRenderResult {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `FogOfWar` is never constructed
[INFO] [stderr]    --> src/world/fog_of_war.rs:102:12
[INFO] [stderr]     |
[INFO] [stderr] 102 | pub struct FogOfWar {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `get_visibility_state`, `process_tile`, `process_position`, and `get_tile_color` are never used
[INFO] [stderr]    --> src/world/fog_of_war.rs:108:12
[INFO] [stderr]     |
[INFO] [stderr] 106 | impl FogOfWar {
[INFO] [stderr]     | ------------- associated items in this implementation
[INFO] [stderr] 107 |     /// Create a new fog of war processor with the given configuration
[INFO] [stderr] 108 |     pub fn new(config: FogOfWarConfig) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 113 |     pub fn get_visibility_state(&self, tile: &Tile) -> VisibilityState {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 124 |     pub fn process_tile(
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 191 |     pub fn process_position(
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 265 |     fn get_tile_color(&self, tile_type: &crate::world::TileType) -> FogColor {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `to_terminal_color` is never used
[INFO] [stderr]    --> src/world/fog_of_war.rs:312:12
[INFO] [stderr]     |
[INFO] [stderr] 300 | impl FogOfWar {
[INFO] [stderr]     | ------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 312 |     pub fn to_terminal_color(color: &FogColor) -> crossterm::style::Color {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MAP_WIDTH` is never used
[INFO] [stderr]  --> src/world/level.rs:7:7
[INFO] [stderr]   |
[INFO] [stderr] 7 | const MAP_WIDTH: usize = 80;
[INFO] [stderr]   |       ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MAP_HEIGHT` is never used
[INFO] [stderr]  --> src/world/level.rs:8:7
[INFO] [stderr]   |
[INFO] [stderr] 8 | const MAP_HEIGHT: usize = 45;
[INFO] [stderr]   |       ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Position` is never constructed
[INFO] [stderr]   --> src/world/level.rs:11:12
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub struct Position {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]   --> src/world/level.rs:17:12
[INFO] [stderr]    |
[INFO] [stderr] 16 | impl Position {
[INFO] [stderr]    | ------------- associated function in this implementation
[INFO] [stderr] 17 |     pub fn new(x: i32, y: i32) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Room` is never constructed
[INFO] [stderr]   --> src/world/level.rs:23:12
[INFO] [stderr]    |
[INFO] [stderr] 23 | pub struct Room {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `center`, `intersects`, `width`, and `height` are never used
[INFO] [stderr]   --> src/world/level.rs:31:12
[INFO] [stderr]    |
[INFO] [stderr] 30 | impl Room {
[INFO] [stderr]    | --------- associated items in this implementation
[INFO] [stderr] 31 |     pub fn new(x: i32, y: i32, width: i32, height: i32) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 40 |     pub fn center(&self) -> Position {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 44 |     pub fn intersects(&self, other: &Room) -> bool {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 48 |     pub fn width(&self) -> i32 {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 52 |     pub fn height(&self) -> i32 {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Level` is never constructed
[INFO] [stderr]   --> src/world/level.rs:58:12
[INFO] [stderr]    |
[INFO] [stderr] 58 | pub struct Level {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/world/level.rs:75:12
[INFO] [stderr]     |
[INFO] [stderr]  74 | impl Level {
[INFO] [stderr]     | ---------- associated items in this implementation
[INFO] [stderr]  75 |     pub fn new(width: usize, height: usize) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  97 |     pub fn generate(
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 196 |     fn create_room(&mut self, room: &Room) {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 210 |     fn create_horizontal_tunnel(&mut self, x1: i32, x2: i32, y: i32) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 222 |     fn create_vertical_tunnel(&mut self, y1: i32, y2: i32, x: i32) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 234 |     fn place_doors(&mut self, room: &Room) {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 267 |     fn is_valid_door_position(&self, x: i32, y: i32) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 291 |     fn place_enemies(&mut self, difficulty: u32) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 322 |     fn place_items(&mut self, _difficulty: u32) {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 388 |     pub fn is_position_valid(&self, x: i32, y: i32) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 393 |     pub fn is_tile_walkable(&self, pos: Position) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 400 |     pub fn get_tile(&self, x: i32, y: i32) -> Option<&Tile> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 408 |     pub fn get_tile_mut(&mut self, x: i32, y: i32) -> Option<&mut Tile> {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 416 |     pub fn get_enemy_at(&self, pos: &Position) -> Option<&Enemy> {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 420 |     pub fn get_enemy_at_mut(&mut self, pos: &Position) -> Option<&mut Enemy> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 424 |     pub fn remove_enemy_at(&mut self, pos: &Position) -> Option<Enemy> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 428 |     pub fn get_item_at(&self, pos: &Position) -> Option<&Item> {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 444 |     pub fn remove_item_at(&mut self, pos: &Position) -> Option<Item> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `TileType` is never used
[INFO] [stderr]  --> src/world/tile.rs:5:10
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub enum TileType {
[INFO] [stderr]   |          ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `is_walkable` and `symbol` are never used
[INFO] [stderr]   --> src/world/tile.rs:16:12
[INFO] [stderr]    |
[INFO] [stderr] 15 | impl TileType {
[INFO] [stderr]    | ------------- methods in this implementation
[INFO] [stderr] 16 |     pub fn is_walkable(&self) -> bool {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 28 |     pub fn symbol(&self) -> char {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Tile` is never constructed
[INFO] [stderr]   --> src/world/tile.rs:42:12
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub struct Tile {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]   --> src/world/tile.rs:49:12
[INFO] [stderr]    |
[INFO] [stderr] 48 | impl Tile {
[INFO] [stderr]    | --------- associated items in this implementation
[INFO] [stderr] 49 |     pub fn new(tile_type: TileType) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 57 |     pub fn wall() -> Self {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 61 |     pub fn floor() -> Self {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 65 |     pub fn door() -> Self {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 69 |     pub fn stairs_down() -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 73 |     pub fn stairs_up() -> Self {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 77 |     pub fn chest() -> Self {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 81 |     pub fn exit() -> Self {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 85 |     pub fn render(&self) -> char {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `CombatAction` is never used
[INFO] [stderr]   --> src/combat/mod.rs:10:10
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub enum CombatAction {
[INFO] [stderr]    |          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `CombatResult` is never constructed
[INFO] [stderr]   --> src/combat/mod.rs:18:12
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub struct CombatResult {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new` and `add_message` are never used
[INFO] [stderr]   --> src/combat/mod.rs:31:12
[INFO] [stderr]    |
[INFO] [stderr] 30 | impl CombatResult {
[INFO] [stderr]    | ----------------- associated items in this implementation
[INFO] [stderr] 31 |     pub fn new() -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 45 |     pub fn add_message(&mut self, message: impl Into<String>) {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `process_combat_turn` is never used
[INFO] [stderr]   --> src/combat/mod.rs:50:8
[INFO] [stderr]    |
[INFO] [stderr] 50 | pub fn process_combat_turn(
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_enemy_defeat` is never used
[INFO] [stderr]    --> src/combat/mod.rs:170:4
[INFO] [stderr]     |
[INFO] [stderr] 170 | fn handle_enemy_defeat(player: &mut Player, enemy: &Enemy, result: &mut CombatResult) {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `init_terminal` is never used
[INFO] [stderr]   --> src/platform.rs:26:8
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub fn init_terminal() -> Result<()> {
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `cleanup_terminal` is never used
[INFO] [stderr]   --> src/platform.rs:42:8
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub fn cleanup_terminal() -> Result<()> {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_terminal_size` is never used
[INFO] [stderr]   --> src/platform.rs:58:8
[INFO] [stderr]    |
[INFO] [stderr] 58 | pub fn get_terminal_size() -> (u16, u16) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `clear_screen` is never used
[INFO] [stderr]   --> src/platform.rs:75:8
[INFO] [stderr]    |
[INFO] [stderr] 75 | pub fn clear_screen() -> Result<()> {
[INFO] [stderr]    |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `check_terminal_compatibility` is never used
[INFO] [stderr]   --> src/platform.rs:96:8
[INFO] [stderr]    |
[INFO] [stderr] 96 | pub fn check_terminal_compatibility() -> Result<()> {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_error` is never used
[INFO] [stderr]    --> src/platform.rs:109:8
[INFO] [stderr]     |
[INFO] [stderr] 109 | pub fn handle_error(error: &anyhow::Error) -> String {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_platform_info` is never used
[INFO] [stderr]    --> src/platform.rs:122:8
[INFO] [stderr]     |
[INFO] [stderr] 122 | pub fn get_platform_info() -> String {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_troubleshooting_tips` is never used
[INFO] [stderr]    --> src/platform.rs:133:4
[INFO] [stderr]     |
[INFO] [stderr] 133 | fn get_troubleshooting_tips() -> &'static str {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `show_welcome_message` is never used
[INFO] [stderr]    --> src/platform.rs:160:8
[INFO] [stderr]     |
[INFO] [stderr] 160 | pub fn show_welcome_message() -> Result<()> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `normalize_key_event` is never used
[INFO] [stderr]    --> src/platform.rs:207:8
[INFO] [stderr]     |
[INFO] [stderr] 207 | pub fn normalize_key_event(key_event: crossterm::event::KeyEvent) -> crossterm::event::KeyEvent {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `set_cmd_fullscreen` is never used
[INFO] [stderr]    --> src/platform.rs:306:8
[INFO] [stderr]     |
[INFO] [stderr] 306 | pub fn set_cmd_fullscreen() -> Result<()> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_terminal_compatible` is never used
[INFO] [stderr]    --> src/platform.rs:373:8
[INFO] [stderr]     |
[INFO] [stderr] 373 | pub fn is_terminal_compatible() -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_recommended_size` is never used
[INFO] [stderr]    --> src/platform.rs:389:8
[INFO] [stderr]     |
[INFO] [stderr] 389 | pub fn get_recommended_size() -> (u16, u16) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_terminal_size_adequate` is never used
[INFO] [stderr]    --> src/platform.rs:395:8
[INFO] [stderr]     |
[INFO] [stderr] 395 | pub fn is_terminal_size_adequate() -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `SCREEN_HEIGHT` is never used
[INFO] [stderr]   --> src/ui/mod.rs:30:7
[INFO] [stderr]    |
[INFO] [stderr] 30 | const SCREEN_HEIGHT: usize = 35;
[INFO] [stderr]    |       ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MAP_WIDTH` is never used
[INFO] [stderr]   --> src/ui/mod.rs:32:7
[INFO] [stderr]    |
[INFO] [stderr] 32 | const MAP_WIDTH: usize = 70;
[INFO] [stderr]    |       ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MAP_HEIGHT` is never used
[INFO] [stderr]   --> src/ui/mod.rs:34:7
[INFO] [stderr]    |
[INFO] [stderr] 34 | const MAP_HEIGHT: usize = 25;
[INFO] [stderr]    |       ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `UI_PANEL_WIDTH` is never used
[INFO] [stderr]   --> src/ui/mod.rs:36:7
[INFO] [stderr]    |
[INFO] [stderr] 36 | const UI_PANEL_WIDTH: usize = 35; // Increased panel width for better readability
[INFO] [stderr]    |       ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `BORDER_PADDING` is never used
[INFO] [stderr]   --> src/ui/mod.rs:38:7
[INFO] [stderr]    |
[INFO] [stderr] 38 | const BORDER_PADDING: usize = 4; // Increased padding inside the border
[INFO] [stderr]    |       ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `create_fog_of_war` is never used
[INFO] [stderr]   --> src/ui/mod.rs:42:4
[INFO] [stderr]    |
[INFO] [stderr] 42 | fn create_fog_of_war() -> FogOfWar {
[INFO] [stderr]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `UI` is never constructed
[INFO] [stderr]   --> src/ui/mod.rs:47:12
[INFO] [stderr]    |
[INFO] [stderr] 47 | pub struct UI {
[INFO] [stderr]    |            ^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]     --> src/ui/mod.rs:54:12
[INFO] [stderr]      |
[INFO] [stderr]   53 | impl UI {
[INFO] [stderr]      | ------- associated items in this implementation
[INFO] [stderr]   54 |     pub fn new() -> Self {
[INFO] [stderr]      |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]   61 |     pub fn show_combat_tutorial(&mut self) -> io::Result<()> {
[INFO] [stderr]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  373 |     pub fn initialize(&mut self) -> io::Result<()> {
[INFO] [stderr]      |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  378 |     pub fn cleanup(&self) -> io::Result<()> {
[INFO] [stderr]      |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  385 |     pub fn clear_screen(&mut self) -> io::Result<()> {
[INFO] [stderr]      |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  390 |     pub fn add_message(&mut self, message: String) {
[INFO] [stderr]      |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  397 |     pub fn clear_messages(&mut self) {
[INFO] [stderr]      |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  401 |     pub fn add_messages_from_combat(&mut self, result: &CombatResult) {
[INFO] [stderr]      |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  407 |     pub fn draw_title_screen(&mut self) -> io::Result<()> {
[INFO] [stderr]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  453 |     pub fn character_creation(&mut self) -> io::Result<Player> {
[INFO] [stderr]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  464 |     fn get_character_name(&mut self) -> io::Result<String> {
[INFO] [stderr]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  565 |     fn choose_character_class(&mut self) -> io::Result<ClassType> {
[INFO] [stderr]      |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  633 |     fn flush_input_buffer(&mut self) -> io::Result<()> {
[INFO] [stderr]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  645 |     pub fn draw_game_screen(
[INFO] [stderr]      |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 1105 |     fn draw_game_border(
[INFO] [stderr]      |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 1207 |     pub fn draw_inventory_screen(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stderr]      |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 1256 |     pub fn draw_character_screen(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stderr]      |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 1334 |     pub fn draw_combat_screen(&mut self, player: &Player, enemy: &Enemy) -> io::Result<()> {
[INFO] [stderr]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 1388 |     pub fn draw_ability_selection(&mut self, player: &Player) -> io::Result<usize> {
[INFO] [stderr]      |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 1456 |     pub fn draw_item_selection(&mut self, player: &Player) -> io::Result<usize> {
[INFO] [stderr]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 1532 |     pub fn handle_combat_action(&mut self, player: &Player) -> io::Result<CombatAction> {
[INFO] [stderr]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 1562 |     pub fn wait_for_key(&mut self) -> io::Result<KeyEvent> {
[INFO] [stderr]      |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 1690 |     pub fn draw_game_over(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stderr]      |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 1737 |     pub fn draw_victory_screen(&mut self, player: &Player) -> io::Result<()> {
[INFO] [stderr]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `GameState` is never used
[INFO] [stderr]   --> src/game/mod.rs:30:10
[INFO] [stderr]    |
[INFO] [stderr] 30 | pub enum GameState {
[INFO] [stderr]    |          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Game` is never constructed
[INFO] [stderr]   --> src/game/mod.rs:41:12
[INFO] [stderr]    |
[INFO] [stderr] 41 | pub struct Game {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/game/mod.rs:53:12
[INFO] [stderr]     |
[INFO] [stderr]  52 | impl Game {
[INFO] [stderr]     | --------- associated items in this implementation
[INFO] [stderr]  53 |     pub fn new(player: Player) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  73 |     pub fn current_dungeon(&self) -> &Dungeon {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  77 |     pub fn current_dungeon_mut(&mut self) -> &mut Dungeon {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  81 |     pub fn current_level(&self) -> &Level {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  85 |     pub fn current_level_mut(&mut self) -> &mut Level {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  89 |     pub fn player_position(&self) -> Position {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  93 |     pub fn move_player(&mut self, dx: i32, dy: i32) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 199 |     pub fn process_turn(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 232 |     pub fn update_visibility(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 294 |     pub fn try_get_item(&mut self) -> Option<String> {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `run` is never used
[INFO] [stderr]    --> src/game/mod.rs:383:8
[INFO] [stderr]     |
[INFO] [stderr] 383 | pub fn run() {
[INFO] [stderr]     |        ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]   --> src/character/stats.rs:47:12
[INFO] [stderr]    |
[INFO] [stderr] 21 | impl Stats {
[INFO] [stderr]    | ---------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 47 |     pub fn set_intelligence(&mut self, value: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 51 |     pub fn set_dexterity(&mut self, value: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 55 |     pub fn set_constitution(&mut self, value: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 59 |     pub fn set_wisdom(&mut self, value: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 68 |     pub fn increase_intelligence(&mut self, amount: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 72 |     pub fn increase_dexterity(&mut self, amount: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 76 |     pub fn increase_constitution(&mut self, amount: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 80 |     pub fn increase_wisdom(&mut self, amount: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `process_position` and `get_tile_color` are never used
[INFO] [stderr]    --> src/world/fog_of_war.rs:191:12
[INFO] [stderr]     |
[INFO] [stderr] 106 | impl FogOfWar {
[INFO] [stderr]     | ------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 191 |     pub fn process_position(
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 265 |     fn get_tile_color(&self, tile_type: &crate::world::TileType) -> FogColor {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `is_walkable` is never used
[INFO] [stderr]   --> src/world/tile.rs:16:12
[INFO] [stderr]    |
[INFO] [stderr] 15 | impl TileType {
[INFO] [stderr]    | ------------- method in this implementation
[INFO] [stderr] 16 |     pub fn is_walkable(&self) -> bool {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated functions are never used
[INFO] [stderr]   --> src/world/tile.rs:57:12
[INFO] [stderr]    |
[INFO] [stderr] 48 | impl Tile {
[INFO] [stderr]    | --------- associated functions in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 57 |     pub fn wall() -> Self {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 61 |     pub fn floor() -> Self {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 65 |     pub fn door() -> Self {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 69 |     pub fn stairs_down() -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 73 |     pub fn stairs_up() -> Self {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 77 |     pub fn chest() -> Self {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 81 |     pub fn exit() -> Self {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `echoes_rpg` (lib) generated 84 warnings
[INFO] [stderr] warning: `echoes_rpg` (lib test) generated 70 warnings (66 duplicates)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.25s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/echoes_rpg-6e79d8290957eb0e)
[INFO] [stdout] 
[INFO] [stdout] running 11 tests
[INFO] [stdout] test platform::tests::test_platform_info ... ok
[INFO] [stdout] test world::fog_of_war::tests::test_visibility_states ... ok
[INFO] [stdout] test world::fog_of_war::tests::test_fog_processing ... ok
[INFO] [stdout] test world::fog_of_war::tests::test_color_dimming ... ok
[INFO] [stdout] test character::stats::tests::test_new_stats ... ok
[INFO] [stdout] test character::stats::tests::test_modify_stat ... ok
[INFO] [stdout] test platform::tests::test_terminal_compatibility ... ok
[INFO] [stdout] test world::fog_factory::tests::test_standard_fog_of_war_creation ... ok
[INFO] [stdout] test platform::tests::test_get_terminal_size ... ok
[INFO] [stdout] test character::stats::tests::test_set_and_increase ... ok
[INFO] [stdout] test character::stats::tests::test_direct_field_access ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/echoes_rpg-141d7ad7b8f58159)
[INFO] [stdout] 
[INFO] [stdout] running 11 tests
[INFO] [stdout] test character::stats::tests::test_direct_field_access ... ok
[INFO] [stdout] test character::stats::tests::test_set_and_increase ... ok
[INFO] [stdout] test platform::tests::test_platform_info ... ok
[INFO] [stdout] test world::fog_of_war::tests::test_color_dimming ... ok
[INFO] [stdout] test world::fog_factory::tests::test_standard_fog_of_war_creation ... ok
[INFO] [stdout] test world::fog_of_war::tests::test_fog_processing ... ok
[INFO] [stdout] test character::stats::tests::test_new_stats ... ok
[INFO] [stdout] test platform::tests::test_get_terminal_size ... ok
[INFO] [stdout] test platform::tests::test_terminal_compatibility ... ok
[INFO] [stdout] test world::fog_of_war::tests::test_visibility_states ... ok
[INFO] [stdout] test character::stats::tests::test_modify_stat ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests echoes_rpg
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test src/inventory/mod.rs - inventory (line 25) ... FAILED
[INFO] [stdout] test src/inventory/mod.rs - inventory (line 9) ... FAILED
[INFO] [stdout] test src/inventory/mod.rs - inventory (line 38) ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- src/inventory/mod.rs - inventory (line 25) stdout ----
[INFO] [stdout] error[E0432]: unresolved import `crate::inventory`
[INFO] [stdout]   --> src/inventory/mod.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | use crate::inventory::InventoryScreen;
[INFO] [stdout]    |            ^^^^^^^^^ could not find `inventory` in the crate root
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `player` in this scope
[INFO] [stdout]   --> src/inventory/mod.rs:31:38
[INFO] [stdout]    |
[INFO] [stdout] 31 | match InventoryScreen::handle_action(player, action) {
[INFO] [stdout]    |                                      ^^^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 2 previous errors
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0425, E0432.
[INFO] [stdout] For more information about an error, try `rustc --explain E0425`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] ---- src/inventory/mod.rs - inventory (line 9) stdout ----
[INFO] [stdout] error[E0432]: unresolved import `crate::inventory`
[INFO] [stdout]   --> src/inventory/mod.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::inventory::InventoryScreen;
[INFO] [stdout]    |            ^^^^^^^^^ could not find `inventory` in the crate root
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `player` in this scope
[INFO] [stdout]   --> src/inventory/mod.rs:13:54
[INFO] [stdout]    |
[INFO] [stdout] 13 | let display_data = InventoryScreen::get_display_data(player);
[INFO] [stdout]    |                                                      ^^^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 2 previous errors
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0425, E0432.
[INFO] [stdout] For more information about an error, try `rustc --explain E0425`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] ---- src/inventory/mod.rs - inventory (line 38) stdout ----
[INFO] [stdout] error[E0432]: unresolved import `crate::inventory`
[INFO] [stdout]   --> src/inventory/mod.rs:39:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | use crate::inventory::InventoryManager;
[INFO] [stdout]    |            ^^^^^^^^^ could not find `inventory` in the crate root
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `player` in this scope
[INFO] [stdout]   --> src/inventory/mod.rs:42:32
[INFO] [stdout]    |
[INFO] [stdout] 42 | if InventoryManager::can_equip(player, 0) {
[INFO] [stdout]    |                                ^^^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `player` in this scope
[INFO] [stdout]   --> src/inventory/mod.rs:43:45
[INFO] [stdout]    |
[INFO] [stdout] 43 |     let result = InventoryManager::use_item(player, 0);
[INFO] [stdout]    |                                             ^^^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `player` in this scope
[INFO] [stdout]   --> src/inventory/mod.rs:48:53
[INFO] [stdout]    |
[INFO] [stdout] 48 | let equipped = InventoryManager::get_equipped_items(player);
[INFO] [stdout]    |                                                     ^^^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 4 previous errors
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0425, E0432.
[INFO] [stdout] For more information about an error, try `rustc --explain E0425`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     src/inventory/mod.rs - inventory (line 25)
[INFO] [stdout]     src/inventory/mod.rs - inventory (line 38)
[INFO] [stdout]     src/inventory/mod.rs - inventory (line 9)
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 0 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
[INFO] [stdout] 
[INFO] [stderr] error: doctest failed, to rerun pass `--doc`
[INFO] running `Command { std: "docker" "inspect" "114c0f15f63d373e69b025aadf6beb4a9d339a1b905188f61cde4806d3df9757", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "114c0f15f63d373e69b025aadf6beb4a9d339a1b905188f61cde4806d3df9757", kill_on_drop: false }`
[INFO] [stdout] 114c0f15f63d373e69b025aadf6beb4a9d339a1b905188f61cde4806d3df9757
