[INFO] cloning repository https://github.com/zzhgithub/card-core-V2
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/zzhgithub/card-core-V2" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fzzhgithub%2Fcard-core-V2", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fzzhgithub%2Fcard-core-V2'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 8f1f0be2f8d87d8dd6085241c46fa20fc203b870
[INFO] testing zzhgithub/card-core-V2/8f1f0be2f8d87d8dd6085241c46fa20fc203b870 against 1.94.0 for beta-1.95-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fzzhgithub%2Fcard-core-V2" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/zzhgithub/card-core-V2
[INFO] finished tweaking git repo https://github.com/zzhgithub/card-core-V2
[INFO] tweaked toml for git repo https://github.com/zzhgithub/card-core-V2 written to /workspace/builds/worker-4-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/zzhgithub/card-core-V2 on toolchain 1.94.0
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.94.0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/zzhgithub/card-core-V2 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" "+1.94.0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: version requirement `1.0.4+spec-1.1.0` for dependency `toml` includes semver metadata which will be ignored, removing the metadata is recommended to avoid confusion
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded tempfile v3.26.0
[INFO] [stderr]   Downloaded erased-serde v0.4.10
[INFO] [stderr]   Downloaded toml_writer v1.0.6+spec-1.1.0
[INFO] [stderr]   Downloaded toml v1.0.4+spec-1.1.0
[INFO] [stderr]   Downloaded luajit-src v210.6.6+707c12b
[INFO] [stderr]   Downloaded lua-src v550.0.0
[INFO] [stderr]   Downloaded mlua-sys v0.10.0
[INFO] [stderr]   Downloaded mlua v0.11.6
[INFO] [stderr]   Downloaded serde_spanned v1.0.4
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.94.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 2d8aa1a1a6bdb125ebb093828ae940fd602a407a518bbdebd67a8ab3a5f24772
[INFO] running `Command { std: "docker" "start" "-a" "2d8aa1a1a6bdb125ebb093828ae940fd602a407a518bbdebd67a8ab3a5f24772", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "2d8aa1a1a6bdb125ebb093828ae940fd602a407a518bbdebd67a8ab3a5f24772", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2d8aa1a1a6bdb125ebb093828ae940fd602a407a518bbdebd67a8ab3a5f24772", kill_on_drop: false }`
[INFO] [stdout] 2d8aa1a1a6bdb125ebb093828ae940fd602a407a518bbdebd67a8ab3a5f24772
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.94.0" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 3a5f72704d6afb72f57253dd0ae09c6a03d4739bd4f2a45dff328b232856edec
[INFO] running `Command { std: "docker" "start" "-a" "3a5f72704d6afb72f57253dd0ae09c6a03d4739bd4f2a45dff328b232856edec", kill_on_drop: false }`
[INFO] [stderr] warning: version requirement `1.0.4+spec-1.1.0` for dependency `toml` includes semver metadata which will be ignored, removing the metadata is recommended to avoid confusion
[INFO] [stderr]    Compiling libc v0.2.182
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling quote v1.0.44
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling find-msvc-tools v0.1.9
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling env_home v0.1.0
[INFO] [stderr]    Compiling zerocopy v0.8.40
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling typeid v1.0.3
[INFO] [stderr]    Compiling erased-serde v0.4.10
[INFO] [stderr]    Compiling ordered-float v2.10.1
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling cc v1.2.56
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling toml_writer v1.0.6+spec-1.1.0
[INFO] [stderr]    Compiling rustc-hash v2.1.1
[INFO] [stderr]    Compiling lua-src v550.0.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling which v8.0.0
[INFO] [stderr]    Compiling luajit-src v210.6.6+707c12b
[INFO] [stderr]    Compiling toml_parser v1.0.9+spec-1.1.0
[INFO] [stderr]    Compiling mlua-sys v0.10.0
[INFO] [stderr]    Compiling toml_datetime v1.0.0+spec-1.1.0
[INFO] [stderr]    Compiling serde_spanned v1.0.4
[INFO] [stderr]    Compiling toml v1.0.4+spec-1.1.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling rand v0.9.2
[INFO] [stderr]    Compiling serde-value v0.7.0
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling mlua v0.11.6
[INFO] [stderr]    Compiling card-ai v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: private item shadows public glob re-export
[INFO] [stdout]   --> src/lib.rs:2:1
[INFO] [stdout]    |
[INFO] [stdout]  2 | mod config;
[INFO] [stdout]    | ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] note: the name `config` in the type namespace is supposed to be publicly re-exported here
[INFO] [stdout]   --> src/lib.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub use lua_api::*;
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] note: but the private item here shadows it
[INFO] [stdout]   --> src/lib.rs:2:1
[INFO] [stdout]    |
[INFO] [stdout]  2 | mod config;
[INFO] [stdout]    | ^^^^^^^^^^^
[INFO] [stdout]    = note: `#[warn(hidden_glob_reexports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: private item shadows public glob re-export
[INFO] [stdout]   --> src/lib.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | mod game;
[INFO] [stdout]    | ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] note: the name `game` in the type namespace is supposed to be publicly re-exported here
[INFO] [stdout]   --> src/lib.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub use game::*;
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] note: but the private item here shadows it
[INFO] [stdout]   --> src/lib.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | mod game;
[INFO] [stdout]    | ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `rand::thread_rng`: Renamed to `rng`
[INFO] [stdout]   --> src/game/game.rs:77:29
[INFO] [stdout]    |
[INFO] [stdout] 77 |         let mut rng = rand::thread_rng();
[INFO] [stdout]    |                             ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lua_ctx`
[INFO] [stdout]    --> src/cards/card_def.rs:393:14
[INFO] [stdout]     |
[INFO] [stdout] 393 |             |lua_ctx, builder, (key, effect_ud): (String, mlua::AnyUserData)| {
[INFO] [stdout]     |              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_lua_ctx`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/game/game.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let mut id_gen = id_generator;
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Game` is never constructed
[INFO] [stdout]  --> src/game/game.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct Game {
[INFO] [stdout]   |            ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `GameNewError` is never used
[INFO] [stdout]   --> src/game/game.rs:20:10
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub enum GameNewError {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `run` are never used
[INFO] [stdout]    --> src/game/game.rs:26:12
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl Game {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout]  26 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn run(&mut self) -> Result<(), String> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DeckLoadingError`
[INFO] [stdout]  --> src/desk/mod.rs:3:46
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub use deck::{Deck, DeckConfig, DeckLoader, DeckLoadingError, DeckValidationError};
[INFO] [stdout]   |                                              ^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ai_controller::AIPlayerController`
[INFO] [stdout]  --> src/player/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use ai_controller::AIPlayerController;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cli_controller::CommandLinePlayerController`
[INFO] [stdout]   --> src/player/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use cli_controller::CommandLinePlayerController;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DeckConfig`
[INFO] [stdout]   --> src/main.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | use desk::{DeckConfig, DeckLoader};
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `rand::thread_rng`: Renamed to `rng`
[INFO] [stdout]   --> src/game/game.rs:77:29
[INFO] [stdout]    |
[INFO] [stdout] 77 |         let mut rng = rand::thread_rng();
[INFO] [stdout]    |                             ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lua_ctx`
[INFO] [stdout]    --> src/cards/card_def.rs:393:14
[INFO] [stdout]     |
[INFO] [stdout] 393 |             |lua_ctx, builder, (key, effect_ud): (String, mlua::AnyUserData)| {
[INFO] [stdout]     |              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_lua_ctx`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/game/game.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let mut id_gen = id_generator;
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `attack` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:49:9
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct CharacterCardSpecifics {
[INFO] [stdout]    |            ---------------------- field in this struct
[INFO] [stdout] 48 |     /// 攻击力
[INFO] [stdout] 49 |     pub attack: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CharacterCardSpecifics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `strategy_attribute` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:66:9
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub struct StrategyCardSpecifics {
[INFO] [stdout]    |            --------------------- field in this struct
[INFO] [stdout] 65 |     /// 策略属性：普通、诡计、瞬时
[INFO] [stdout] 66 |     pub strategy_attribute: StrategyCardAttribute,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StrategyCardSpecifics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/cards/card_def.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 69 | impl StrategyCardSpecifics {
[INFO] [stdout]    | -------------------------- associated function in this implementation
[INFO] [stdout] 70 |     pub fn new(strategy_attr: StrategyCardAttribute) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `item_attribute` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:89:9
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub struct ItemCardSpecifics {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] 88 |     /// 物品属性：普通、存留
[INFO] [stdout] 89 |     pub item_attribute: ItemCardAttribute,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ItemCardSpecifics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:95:15
[INFO] [stdout]    |
[INFO] [stdout] 95 |     Character(CharacterCardSpecifics),
[INFO] [stdout]    |     --------- ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CardSpecificData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 95 -     Character(CharacterCardSpecifics),
[INFO] [stdout] 95 +     Character(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:96:14
[INFO] [stdout]    |
[INFO] [stdout] 96 |     Strategy(StrategyCardSpecifics),
[INFO] [stdout]    |     -------- ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CardSpecificData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 96 -     Strategy(StrategyCardSpecifics),
[INFO] [stdout] 96 +     Strategy(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:97:10
[INFO] [stdout]    |
[INFO] [stdout] 97 |     Item(ItemCardSpecifics),
[INFO] [stdout]    |     ---- ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CardSpecificData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 97 -     Item(ItemCardSpecifics),
[INFO] [stdout] 97 +     Item(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `attribute`, `fields`, `category`, `cost`, `effects`, and `specific_data` are never read
[INFO] [stdout]    --> src/cards/card_def.rs:109:9
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub struct Card {
[INFO] [stdout]     |            ---- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub attribute: CardAttribute,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fields: HashMap<String, String>, // 可能需要更具体的类型定义
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 114 |     /// 卡片范畴（数学、科学、文艺、哲学、神秘）
[INFO] [stdout] 115 |     pub category: CardCategory,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 116 |     /// 费用
[INFO] [stdout] 117 |     pub cost: u32,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 118 |     /// 效果：HashMap key为e1,e2 以此类推，value为Effect效果对象
[INFO] [stdout] 119 |     pub effects: HashMap<String, Effect>,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] 120 |     /// 特有属性数据
[INFO] [stdout] 121 |     pub specific_data: CardSpecificData,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Card` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `add_effect` are never used
[INFO] [stdout]    --> src/cards/card_def.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | impl Card {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout] 125 |     /// 创建基本卡片实例的构造函数
[INFO] [stdout] 126 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub fn add_effect(&mut self, key: String, effect: Effect) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/cards/card_def.rs:220:12
[INFO] [stdout]     |
[INFO] [stdout] 198 | impl CardBuilder {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 220 |     pub fn card_type(mut self, card_type: CardType) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub fn attribute(mut self, attribute: CardAttribute) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn name(mut self, name: String) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 235 |     pub fn category(mut self, category: CardCategory) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn cost(mut self, cost: u32) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 245 |     pub fn attack(mut self, attack: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn strategy_attribute(mut self, attr: StrategyCardAttribute) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |     pub fn item_attribute(mut self, attr: ItemCardAttribute) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn effect(mut self, key: String, effect: Effect) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn field(mut self, key: String, value: String) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min` and `actual` are never read
[INFO] [stdout]   --> src/desk/deck.rs:13:25
[INFO] [stdout]    |
[INFO] [stdout] 13 |     InsufficientCards { min: usize, actual: usize },
[INFO] [stdout]    |     -----------------   ^^^         ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `max` and `actual` are never read
[INFO] [stdout]   --> src/desk/deck.rs:15:24
[INFO] [stdout]    |
[INFO] [stdout] 15 |     ExceededMaxCards { max: usize, actual: usize },
[INFO] [stdout]    |     ----------------   ^^^         ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/desk/deck.rs:17:18
[INFO] [stdout]    |
[INFO] [stdout] 17 |     CardNotFound(String),
[INFO] [stdout]    |     ------------ ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 17 -     CardNotFound(String),
[INFO] [stdout] 17 +     CardNotFound(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `card_id`, `max`, and `actual` are never read
[INFO] [stdout]   --> src/desk/deck.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 19 |     ExceededMaxCopies {
[INFO] [stdout]    |     ----------------- fields in this variant
[INFO] [stdout] 20 |         card_id: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 21 |         max: usize,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 22 |         actual: usize,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/desk/deck.rs:25:25
[INFO] [stdout]    |
[INFO] [stdout] 25 |     MissingRequiredCard(String),
[INFO] [stdout]    |     ------------------- ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 25 -     MissingRequiredCard(String),
[INFO] [stdout] 25 +     MissingRequiredCard(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `len` and `is_empty` are never used
[INFO] [stdout]    --> src/desk/deck.rs:136:12
[INFO] [stdout]     |
[INFO] [stdout]  64 | impl Deck {
[INFO] [stdout]     | --------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `get_deck_by_name` is never used
[INFO] [stdout]    --> src/desk/deck.rs:192:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | impl DeckLoader {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn get_deck_by_name(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DeckLoadingError` is never used
[INFO] [stdout]    --> src/desk/deck.rs:210:10
[INFO] [stdout]     |
[INFO] [stdout] 210 | pub enum DeckLoadingError {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new_detailed` is never used
[INFO] [stdout]   --> src/effect/effect_def.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl Effect {
[INFO] [stdout]    | ----------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn new_detailed(
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `entity_id`, `original_card`, and `current_card` are never read
[INFO] [stdout]  --> src/entity/card_entity.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct CardEntity {
[INFO] [stdout]   |            ---------- fields in this struct
[INFO] [stdout] 5 |     pub entity_id: u64,
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 6 |     pub original_card: Card,
[INFO] [stdout]   |         ^^^^^^^^^^^^^
[INFO] [stdout] 7 |     pub current_card: Card,
[INFO] [stdout]   |         ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `CardEntity` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `reset_to_original` is never used
[INFO] [stdout]   --> src/entity/card_entity.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl CardEntity {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn reset_to_original(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `player_zones` and `id_generator` are never read
[INFO] [stdout]   --> src/game/game.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct Game {
[INFO] [stdout]    |            ---- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub player_zones: Vec<PlayerZones>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 16 |     id_generator: IdGenerator,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/game/game.rs:21:20
[INFO] [stdout]    |
[INFO] [stdout] 21 |     DeckValidation(DeckValidationError),
[INFO] [stdout]    |     -------------- ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GameNewError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 21 -     DeckValidation(DeckValidationError),
[INFO] [stdout] 21 +     DeckValidation(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/game/game.rs:22:18
[INFO] [stdout]    |
[INFO] [stdout] 22 |     CardNotFound(String),
[INFO] [stdout]    |     ------------ ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GameNewError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 22 -     CardNotFound(String),
[INFO] [stdout] 22 +     CardNotFound(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Opponent` and `Both` are never constructed
[INFO] [stdout]  --> src/player/ask_action.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub enum AskAction {
[INFO] [stdout]   |          --------- variants in this enum
[INFO] [stdout] 4 |     CurrentPlayer,
[INFO] [stdout] 5 |     Opponent,
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 6 |     Both(Vec<String>),
[INFO] [stdout]   |     ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `AskAction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `PlayCard`, `UseResource`, `BlockAttack`, and `EndTurn` are never constructed
[INFO] [stdout]  --> src/player/player_action.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub enum PlayerAction {
[INFO] [stdout]   |          ------------ variants in this enum
[INFO] [stdout] 3 |     PlayCard(String),
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 4 |     Pass,
[INFO] [stdout] 5 |     UseResource(i32),
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 6 |     DeclareAttack,
[INFO] [stdout] 7 |     BlockAttack,
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 8 |     EndTurn,
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `PlayerAction` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `COST_ZONE_LIMIT` is never used
[INFO] [stdout]  --> src/player/zone.rs:8:11
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub const COST_ZONE_LIMIT: usize = 6;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/player/zone.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl Zone {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 20 |     /// Create a new zone with unlimited capacity
[INFO] [stdout] 21 |     pub fn new_unlimited() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn add_card(&mut self, card_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn remove_card(&mut self, card_id: CardEntityId) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn cards(&self) -> &Vec<CardEntityId> {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn cards_mut(&mut self) -> &mut Vec<CardEntityId> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn len(&self) -> usize {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub fn clear(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn capacity(&self) -> Option<usize> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn set_capacity(&mut self, capacity: usize) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/player/zone.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 119 | impl PlayerZones {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn add_to_front_line(&mut self, card_entity_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn add_to_front_line_position(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn add_to_back_line(&mut self, card_entity_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn add_to_back_line_position(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn add_to_cost_zone(&mut self, card_entity_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn move_to_graveyard(&mut self, card_entity_id: CardEntityId) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 231 |     pub fn card_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 30.01s
[INFO] running `Command { std: "docker" "inspect" "3a5f72704d6afb72f57253dd0ae09c6a03d4739bd4f2a45dff328b232856edec", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3a5f72704d6afb72f57253dd0ae09c6a03d4739bd4f2a45dff328b232856edec", kill_on_drop: false }`
[INFO] [stdout] 3a5f72704d6afb72f57253dd0ae09c6a03d4739bd4f2a45dff328b232856edec
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.94.0" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 53bb442d2499d97bd951d3d34b995b89088118feaeca8cb6fc614b23e01145bb
[INFO] running `Command { std: "docker" "start" "-a" "53bb442d2499d97bd951d3d34b995b89088118feaeca8cb6fc614b23e01145bb", kill_on_drop: false }`
[INFO] [stderr] warning: version requirement `1.0.4+spec-1.1.0` for dependency `toml` includes semver metadata which will be ignored, removing the metadata is recommended to avoid confusion
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling once_cell v1.21.3
[INFO] [stderr]    Compiling tempfile v3.26.0
[INFO] [stderr]    Compiling which v8.0.0
[INFO] [stderr]    Compiling luajit-src v210.6.6+707c12b
[INFO] [stderr]    Compiling mlua-sys v0.10.0
[INFO] [stderr]    Compiling mlua v0.11.6
[INFO] [stderr]    Compiling card-ai v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: private item shadows public glob re-export
[INFO] [stdout]   --> src/lib.rs:2:1
[INFO] [stdout]    |
[INFO] [stdout]  2 | mod config;
[INFO] [stdout]    | ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] note: the name `config` in the type namespace is supposed to be publicly re-exported here
[INFO] [stdout]   --> src/lib.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub use lua_api::*;
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] note: but the private item here shadows it
[INFO] [stdout]   --> src/lib.rs:2:1
[INFO] [stdout]    |
[INFO] [stdout]  2 | mod config;
[INFO] [stdout]    | ^^^^^^^^^^^
[INFO] [stdout]    = note: `#[warn(hidden_glob_reexports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: private item shadows public glob re-export
[INFO] [stdout]   --> src/lib.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | mod game;
[INFO] [stdout]    | ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] note: the name `game` in the type namespace is supposed to be publicly re-exported here
[INFO] [stdout]   --> src/lib.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub use game::*;
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] note: but the private item here shadows it
[INFO] [stdout]   --> src/lib.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | mod game;
[INFO] [stdout]    | ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `rand::thread_rng`: Renamed to `rng`
[INFO] [stdout]   --> src/game/game.rs:77:29
[INFO] [stdout]    |
[INFO] [stdout] 77 |         let mut rng = rand::thread_rng();
[INFO] [stdout]    |                             ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lua_ctx`
[INFO] [stdout]    --> src/cards/card_def.rs:393:14
[INFO] [stdout]     |
[INFO] [stdout] 393 |             |lua_ctx, builder, (key, effect_ud): (String, mlua::AnyUserData)| {
[INFO] [stdout]     |              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_lua_ctx`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: private item shadows public glob re-export
[INFO] [stdout]   --> src/lib.rs:2:1
[INFO] [stdout]    |
[INFO] [stdout]  2 | mod config;
[INFO] [stdout]    | ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] note: the name `config` in the type namespace is supposed to be publicly re-exported here
[INFO] [stdout]   --> src/lib.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub use lua_api::*;
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] note: but the private item here shadows it
[INFO] [stdout]   --> src/lib.rs:2:1
[INFO] [stdout]    |
[INFO] [stdout]  2 | mod config;
[INFO] [stdout]    | ^^^^^^^^^^^
[INFO] [stdout]    = note: `#[warn(hidden_glob_reexports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: private item shadows public glob re-export
[INFO] [stdout]   --> src/lib.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | mod game;
[INFO] [stdout]    | ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] note: the name `game` in the type namespace is supposed to be publicly re-exported here
[INFO] [stdout]   --> src/lib.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub use game::*;
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] note: but the private item here shadows it
[INFO] [stdout]   --> src/lib.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | mod game;
[INFO] [stdout]    | ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `rand::thread_rng`: Renamed to `rng`
[INFO] [stdout]   --> src/game/game.rs:77:29
[INFO] [stdout]    |
[INFO] [stdout] 77 |         let mut rng = rand::thread_rng();
[INFO] [stdout]    |                             ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/game/game.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let mut id_gen = id_generator;
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Game` is never constructed
[INFO] [stdout]  --> src/game/game.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct Game {
[INFO] [stdout]   |            ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `GameNewError` is never used
[INFO] [stdout]   --> src/game/game.rs:20:10
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub enum GameNewError {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `run` are never used
[INFO] [stdout]    --> src/game/game.rs:26:12
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl Game {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout]  26 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn run(&mut self) -> Result<(), String> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lua_ctx`
[INFO] [stdout]    --> src/cards/card_def.rs:393:14
[INFO] [stdout]     |
[INFO] [stdout] 393 |             |lua_ctx, builder, (key, effect_ud): (String, mlua::AnyUserData)| {
[INFO] [stdout]     |              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_lua_ctx`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/game/game.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let mut id_gen = id_generator;
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Game` is never constructed
[INFO] [stdout]  --> src/game/game.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct Game {
[INFO] [stdout]   |            ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `GameNewError` is never used
[INFO] [stdout]   --> src/game/game.rs:20:10
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub enum GameNewError {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `run` are never used
[INFO] [stdout]    --> src/game/game.rs:26:12
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl Game {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout]  26 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn run(&mut self) -> Result<(), String> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DeckLoadingError`
[INFO] [stdout]  --> src/desk/mod.rs:3:46
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub use deck::{Deck, DeckConfig, DeckLoader, DeckLoadingError, DeckValidationError};
[INFO] [stdout]   |                                              ^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ai_controller::AIPlayerController`
[INFO] [stdout]  --> src/player/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use ai_controller::AIPlayerController;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cli_controller::CommandLinePlayerController`
[INFO] [stdout]   --> src/player/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use cli_controller::CommandLinePlayerController;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DeckConfig`
[INFO] [stdout]   --> src/main.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | use desk::{DeckConfig, DeckLoader};
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `rand::thread_rng`: Renamed to `rng`
[INFO] [stdout]   --> src/game/game.rs:77:29
[INFO] [stdout]    |
[INFO] [stdout] 77 |         let mut rng = rand::thread_rng();
[INFO] [stdout]    |                             ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lua_ctx`
[INFO] [stdout]    --> src/cards/card_def.rs:393:14
[INFO] [stdout]     |
[INFO] [stdout] 393 |             |lua_ctx, builder, (key, effect_ud): (String, mlua::AnyUserData)| {
[INFO] [stdout]     |              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_lua_ctx`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DeckLoadingError`
[INFO] [stdout]  --> src/desk/mod.rs:3:46
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub use deck::{Deck, DeckConfig, DeckLoader, DeckLoadingError, DeckValidationError};
[INFO] [stdout]   |                                              ^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ai_controller::AIPlayerController`
[INFO] [stdout]  --> src/player/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use ai_controller::AIPlayerController;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cli_controller::CommandLinePlayerController`
[INFO] [stdout]   --> src/player/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use cli_controller::CommandLinePlayerController;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DeckConfig`
[INFO] [stdout]   --> src/main.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | use desk::{DeckConfig, DeckLoader};
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `rand::thread_rng`: Renamed to `rng`
[INFO] [stdout]   --> src/game/game.rs:77:29
[INFO] [stdout]    |
[INFO] [stdout] 77 |         let mut rng = rand::thread_rng();
[INFO] [stdout]    |                             ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/game/game.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let mut id_gen = id_generator;
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `attack` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:49:9
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct CharacterCardSpecifics {
[INFO] [stdout]    |            ---------------------- field in this struct
[INFO] [stdout] 48 |     /// 攻击力
[INFO] [stdout] 49 |     pub attack: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CharacterCardSpecifics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `strategy_attribute` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:66:9
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub struct StrategyCardSpecifics {
[INFO] [stdout]    |            --------------------- field in this struct
[INFO] [stdout] 65 |     /// 策略属性：普通、诡计、瞬时
[INFO] [stdout] 66 |     pub strategy_attribute: StrategyCardAttribute,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StrategyCardSpecifics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/cards/card_def.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 69 | impl StrategyCardSpecifics {
[INFO] [stdout]    | -------------------------- associated function in this implementation
[INFO] [stdout] 70 |     pub fn new(strategy_attr: StrategyCardAttribute) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `item_attribute` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:89:9
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub struct ItemCardSpecifics {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] 88 |     /// 物品属性：普通、存留
[INFO] [stdout] 89 |     pub item_attribute: ItemCardAttribute,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ItemCardSpecifics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:95:15
[INFO] [stdout]    |
[INFO] [stdout] 95 |     Character(CharacterCardSpecifics),
[INFO] [stdout]    |     --------- ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CardSpecificData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 95 -     Character(CharacterCardSpecifics),
[INFO] [stdout] 95 +     Character(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:96:14
[INFO] [stdout]    |
[INFO] [stdout] 96 |     Strategy(StrategyCardSpecifics),
[INFO] [stdout]    |     -------- ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CardSpecificData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 96 -     Strategy(StrategyCardSpecifics),
[INFO] [stdout] 96 +     Strategy(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:97:10
[INFO] [stdout]    |
[INFO] [stdout] 97 |     Item(ItemCardSpecifics),
[INFO] [stdout]    |     ---- ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CardSpecificData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 97 -     Item(ItemCardSpecifics),
[INFO] [stdout] 97 +     Item(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `attribute`, `fields`, `category`, `cost`, `effects`, and `specific_data` are never read
[INFO] [stdout]    --> src/cards/card_def.rs:109:9
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub struct Card {
[INFO] [stdout]     |            ---- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub attribute: CardAttribute,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fields: HashMap<String, String>, // 可能需要更具体的类型定义
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 114 |     /// 卡片范畴（数学、科学、文艺、哲学、神秘）
[INFO] [stdout] 115 |     pub category: CardCategory,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 116 |     /// 费用
[INFO] [stdout] 117 |     pub cost: u32,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 118 |     /// 效果：HashMap key为e1,e2 以此类推，value为Effect效果对象
[INFO] [stdout] 119 |     pub effects: HashMap<String, Effect>,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] 120 |     /// 特有属性数据
[INFO] [stdout] 121 |     pub specific_data: CardSpecificData,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Card` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `add_effect` are never used
[INFO] [stdout]    --> src/cards/card_def.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | impl Card {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout] 125 |     /// 创建基本卡片实例的构造函数
[INFO] [stdout] 126 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub fn add_effect(&mut self, key: String, effect: Effect) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/cards/card_def.rs:220:12
[INFO] [stdout]     |
[INFO] [stdout] 198 | impl CardBuilder {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 220 |     pub fn card_type(mut self, card_type: CardType) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub fn attribute(mut self, attribute: CardAttribute) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn name(mut self, name: String) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 235 |     pub fn category(mut self, category: CardCategory) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn cost(mut self, cost: u32) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 245 |     pub fn attack(mut self, attack: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn strategy_attribute(mut self, attr: StrategyCardAttribute) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |     pub fn item_attribute(mut self, attr: ItemCardAttribute) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn effect(mut self, key: String, effect: Effect) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn field(mut self, key: String, value: String) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min` and `actual` are never read
[INFO] [stdout]   --> src/desk/deck.rs:13:25
[INFO] [stdout]    |
[INFO] [stdout] 13 |     InsufficientCards { min: usize, actual: usize },
[INFO] [stdout]    |     -----------------   ^^^         ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `max` and `actual` are never read
[INFO] [stdout]   --> src/desk/deck.rs:15:24
[INFO] [stdout]    |
[INFO] [stdout] 15 |     ExceededMaxCards { max: usize, actual: usize },
[INFO] [stdout]    |     ----------------   ^^^         ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/desk/deck.rs:17:18
[INFO] [stdout]    |
[INFO] [stdout] 17 |     CardNotFound(String),
[INFO] [stdout]    |     ------------ ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 17 -     CardNotFound(String),
[INFO] [stdout] 17 +     CardNotFound(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `card_id`, `max`, and `actual` are never read
[INFO] [stdout]   --> src/desk/deck.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 19 |     ExceededMaxCopies {
[INFO] [stdout]    |     ----------------- fields in this variant
[INFO] [stdout] 20 |         card_id: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 21 |         max: usize,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 22 |         actual: usize,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/desk/deck.rs:25:25
[INFO] [stdout]    |
[INFO] [stdout] 25 |     MissingRequiredCard(String),
[INFO] [stdout]    |     ------------------- ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 25 -     MissingRequiredCard(String),
[INFO] [stdout] 25 +     MissingRequiredCard(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `len` and `is_empty` are never used
[INFO] [stdout]    --> src/desk/deck.rs:136:12
[INFO] [stdout]     |
[INFO] [stdout]  64 | impl Deck {
[INFO] [stdout]     | --------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `get_deck_by_name` is never used
[INFO] [stdout]    --> src/desk/deck.rs:192:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | impl DeckLoader {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn get_deck_by_name(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DeckLoadingError` is never used
[INFO] [stdout]    --> src/desk/deck.rs:210:10
[INFO] [stdout]     |
[INFO] [stdout] 210 | pub enum DeckLoadingError {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new_detailed` is never used
[INFO] [stdout]   --> src/effect/effect_def.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl Effect {
[INFO] [stdout]    | ----------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn new_detailed(
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `entity_id`, `original_card`, and `current_card` are never read
[INFO] [stdout]  --> src/entity/card_entity.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct CardEntity {
[INFO] [stdout]   |            ---------- fields in this struct
[INFO] [stdout] 5 |     pub entity_id: u64,
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 6 |     pub original_card: Card,
[INFO] [stdout]   |         ^^^^^^^^^^^^^
[INFO] [stdout] 7 |     pub current_card: Card,
[INFO] [stdout]   |         ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `CardEntity` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `reset_to_original` is never used
[INFO] [stdout]   --> src/entity/card_entity.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl CardEntity {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn reset_to_original(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `player_zones` and `id_generator` are never read
[INFO] [stdout]   --> src/game/game.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct Game {
[INFO] [stdout]    |            ---- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub player_zones: Vec<PlayerZones>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 16 |     id_generator: IdGenerator,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/game/game.rs:21:20
[INFO] [stdout]    |
[INFO] [stdout] 21 |     DeckValidation(DeckValidationError),
[INFO] [stdout]    |     -------------- ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GameNewError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 21 -     DeckValidation(DeckValidationError),
[INFO] [stdout] 21 +     DeckValidation(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/game/game.rs:22:18
[INFO] [stdout]    |
[INFO] [stdout] 22 |     CardNotFound(String),
[INFO] [stdout]    |     ------------ ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GameNewError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 22 -     CardNotFound(String),
[INFO] [stdout] 22 +     CardNotFound(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Opponent` and `Both` are never constructed
[INFO] [stdout]  --> src/player/ask_action.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub enum AskAction {
[INFO] [stdout]   |          --------- variants in this enum
[INFO] [stdout] 4 |     CurrentPlayer,
[INFO] [stdout] 5 |     Opponent,
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 6 |     Both(Vec<String>),
[INFO] [stdout]   |     ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `AskAction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `PlayCard`, `UseResource`, `BlockAttack`, and `EndTurn` are never constructed
[INFO] [stdout]  --> src/player/player_action.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub enum PlayerAction {
[INFO] [stdout]   |          ------------ variants in this enum
[INFO] [stdout] 3 |     PlayCard(String),
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 4 |     Pass,
[INFO] [stdout] 5 |     UseResource(i32),
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 6 |     DeclareAttack,
[INFO] [stdout] 7 |     BlockAttack,
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 8 |     EndTurn,
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `PlayerAction` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `COST_ZONE_LIMIT` is never used
[INFO] [stdout]  --> src/player/zone.rs:8:11
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub const COST_ZONE_LIMIT: usize = 6;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/player/zone.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl Zone {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 20 |     /// Create a new zone with unlimited capacity
[INFO] [stdout] 21 |     pub fn new_unlimited() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn add_card(&mut self, card_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn remove_card(&mut self, card_id: CardEntityId) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn cards(&self) -> &Vec<CardEntityId> {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn cards_mut(&mut self) -> &mut Vec<CardEntityId> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn len(&self) -> usize {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub fn clear(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn capacity(&self) -> Option<usize> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn set_capacity(&mut self, capacity: usize) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/player/zone.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 119 | impl PlayerZones {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn add_to_front_line(&mut self, card_entity_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn add_to_front_line_position(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn add_to_back_line(&mut self, card_entity_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn add_to_back_line_position(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn add_to_cost_zone(&mut self, card_entity_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn move_to_graveyard(&mut self, card_entity_id: CardEntityId) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 231 |     pub fn card_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lua_ctx`
[INFO] [stdout]    --> src/cards/card_def.rs:393:14
[INFO] [stdout]     |
[INFO] [stdout] 393 |             |lua_ctx, builder, (key, effect_ud): (String, mlua::AnyUserData)| {
[INFO] [stdout]     |              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_lua_ctx`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/game/game.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let mut id_gen = id_generator;
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `attack` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:49:9
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct CharacterCardSpecifics {
[INFO] [stdout]    |            ---------------------- field in this struct
[INFO] [stdout] 48 |     /// 攻击力
[INFO] [stdout] 49 |     pub attack: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CharacterCardSpecifics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `strategy_attribute` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:66:9
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub struct StrategyCardSpecifics {
[INFO] [stdout]    |            --------------------- field in this struct
[INFO] [stdout] 65 |     /// 策略属性：普通、诡计、瞬时
[INFO] [stdout] 66 |     pub strategy_attribute: StrategyCardAttribute,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StrategyCardSpecifics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/cards/card_def.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 69 | impl StrategyCardSpecifics {
[INFO] [stdout]    | -------------------------- associated function in this implementation
[INFO] [stdout] 70 |     pub fn new(strategy_attr: StrategyCardAttribute) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `item_attribute` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:89:9
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub struct ItemCardSpecifics {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] 88 |     /// 物品属性：普通、存留
[INFO] [stdout] 89 |     pub item_attribute: ItemCardAttribute,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ItemCardSpecifics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:95:15
[INFO] [stdout]    |
[INFO] [stdout] 95 |     Character(CharacterCardSpecifics),
[INFO] [stdout]    |     --------- ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CardSpecificData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 95 -     Character(CharacterCardSpecifics),
[INFO] [stdout] 95 +     Character(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:96:14
[INFO] [stdout]    |
[INFO] [stdout] 96 |     Strategy(StrategyCardSpecifics),
[INFO] [stdout]    |     -------- ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CardSpecificData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 96 -     Strategy(StrategyCardSpecifics),
[INFO] [stdout] 96 +     Strategy(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/cards/card_def.rs:97:10
[INFO] [stdout]    |
[INFO] [stdout] 97 |     Item(ItemCardSpecifics),
[INFO] [stdout]    |     ---- ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CardSpecificData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 97 -     Item(ItemCardSpecifics),
[INFO] [stdout] 97 +     Item(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `attribute`, `fields`, `category`, `effects`, and `specific_data` are never read
[INFO] [stdout]    --> src/cards/card_def.rs:109:9
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub struct Card {
[INFO] [stdout]     |            ---- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub attribute: CardAttribute,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fields: HashMap<String, String>, // 可能需要更具体的类型定义
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 114 |     /// 卡片范畴（数学、科学、文艺、哲学、神秘）
[INFO] [stdout] 115 |     pub category: CardCategory,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub effects: HashMap<String, Effect>,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] 120 |     /// 特有属性数据
[INFO] [stdout] 121 |     pub specific_data: CardSpecificData,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Card` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `add_effect` are never used
[INFO] [stdout]    --> src/cards/card_def.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | impl Card {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout] 125 |     /// 创建基本卡片实例的构造函数
[INFO] [stdout] 126 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub fn add_effect(&mut self, key: String, effect: Effect) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/cards/card_def.rs:220:12
[INFO] [stdout]     |
[INFO] [stdout] 198 | impl CardBuilder {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 220 |     pub fn card_type(mut self, card_type: CardType) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub fn attribute(mut self, attribute: CardAttribute) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn name(mut self, name: String) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 235 |     pub fn category(mut self, category: CardCategory) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn cost(mut self, cost: u32) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 245 |     pub fn attack(mut self, attack: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn strategy_attribute(mut self, attr: StrategyCardAttribute) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |     pub fn item_attribute(mut self, attr: ItemCardAttribute) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn effect(mut self, key: String, effect: Effect) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn field(mut self, key: String, value: String) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min` and `actual` are never read
[INFO] [stdout]   --> src/desk/deck.rs:13:25
[INFO] [stdout]    |
[INFO] [stdout] 13 |     InsufficientCards { min: usize, actual: usize },
[INFO] [stdout]    |     -----------------   ^^^         ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `max` and `actual` are never read
[INFO] [stdout]   --> src/desk/deck.rs:15:24
[INFO] [stdout]    |
[INFO] [stdout] 15 |     ExceededMaxCards { max: usize, actual: usize },
[INFO] [stdout]    |     ----------------   ^^^         ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/desk/deck.rs:17:18
[INFO] [stdout]    |
[INFO] [stdout] 17 |     CardNotFound(String),
[INFO] [stdout]    |     ------------ ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 17 -     CardNotFound(String),
[INFO] [stdout] 17 +     CardNotFound(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `card_id`, `max`, and `actual` are never read
[INFO] [stdout]   --> src/desk/deck.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 19 |     ExceededMaxCopies {
[INFO] [stdout]    |     ----------------- fields in this variant
[INFO] [stdout] 20 |         card_id: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 21 |         max: usize,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 22 |         actual: usize,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/desk/deck.rs:25:25
[INFO] [stdout]    |
[INFO] [stdout] 25 |     MissingRequiredCard(String),
[INFO] [stdout]    |     ------------------- ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 25 -     MissingRequiredCard(String),
[INFO] [stdout] 25 +     MissingRequiredCard(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `len` and `is_empty` are never used
[INFO] [stdout]    --> src/desk/deck.rs:136:12
[INFO] [stdout]     |
[INFO] [stdout]  64 | impl Deck {
[INFO] [stdout]     | --------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `get_deck_by_name` is never used
[INFO] [stdout]    --> src/desk/deck.rs:192:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | impl DeckLoader {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn get_deck_by_name(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DeckLoadingError` is never used
[INFO] [stdout]    --> src/desk/deck.rs:210:10
[INFO] [stdout]     |
[INFO] [stdout] 210 | pub enum DeckLoadingError {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new_detailed` is never used
[INFO] [stdout]   --> src/effect/effect_def.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl Effect {
[INFO] [stdout]    | ----------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn new_detailed(
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `entity_id`, `original_card`, and `current_card` are never read
[INFO] [stdout]  --> src/entity/card_entity.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct CardEntity {
[INFO] [stdout]   |            ---------- fields in this struct
[INFO] [stdout] 5 |     pub entity_id: u64,
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 6 |     pub original_card: Card,
[INFO] [stdout]   |         ^^^^^^^^^^^^^
[INFO] [stdout] 7 |     pub current_card: Card,
[INFO] [stdout]   |         ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `CardEntity` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `reset_to_original` is never used
[INFO] [stdout]   --> src/entity/card_entity.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl CardEntity {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn reset_to_original(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `player_zones` and `id_generator` are never read
[INFO] [stdout]   --> src/game/game.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct Game {
[INFO] [stdout]    |            ---- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub player_zones: Vec<PlayerZones>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 16 |     id_generator: IdGenerator,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/game/game.rs:21:20
[INFO] [stdout]    |
[INFO] [stdout] 21 |     DeckValidation(DeckValidationError),
[INFO] [stdout]    |     -------------- ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GameNewError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 21 -     DeckValidation(DeckValidationError),
[INFO] [stdout] 21 +     DeckValidation(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/game/game.rs:22:18
[INFO] [stdout]    |
[INFO] [stdout] 22 |     CardNotFound(String),
[INFO] [stdout]    |     ------------ ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GameNewError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 22 -     CardNotFound(String),
[INFO] [stdout] 22 +     CardNotFound(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Opponent` and `Both` are never constructed
[INFO] [stdout]  --> src/player/ask_action.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub enum AskAction {
[INFO] [stdout]   |          --------- variants in this enum
[INFO] [stdout] 4 |     CurrentPlayer,
[INFO] [stdout] 5 |     Opponent,
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 6 |     Both(Vec<String>),
[INFO] [stdout]   |     ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `AskAction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `PlayCard`, `UseResource`, `BlockAttack`, and `EndTurn` are never constructed
[INFO] [stdout]  --> src/player/player_action.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub enum PlayerAction {
[INFO] [stdout]   |          ------------ variants in this enum
[INFO] [stdout] 3 |     PlayCard(String),
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 4 |     Pass,
[INFO] [stdout] 5 |     UseResource(i32),
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 6 |     DeclareAttack,
[INFO] [stdout] 7 |     BlockAttack,
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 8 |     EndTurn,
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `PlayerAction` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `COST_ZONE_LIMIT` is never used
[INFO] [stdout]  --> src/player/zone.rs:8:11
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub const COST_ZONE_LIMIT: usize = 6;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/player/zone.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl Zone {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 20 |     /// Create a new zone with unlimited capacity
[INFO] [stdout] 21 |     pub fn new_unlimited() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn add_card(&mut self, card_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn remove_card(&mut self, card_id: CardEntityId) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn cards(&self) -> &Vec<CardEntityId> {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn cards_mut(&mut self) -> &mut Vec<CardEntityId> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn len(&self) -> usize {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub fn clear(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn capacity(&self) -> Option<usize> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn set_capacity(&mut self, capacity: usize) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/player/zone.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 119 | impl PlayerZones {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn add_to_front_line(&mut self, card_entity_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn add_to_front_line_position(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn add_to_back_line(&mut self, card_entity_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn add_to_back_line_position(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn add_to_cost_zone(&mut self, card_entity_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn move_to_graveyard(&mut self, card_entity_id: CardEntityId) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 231 |     pub fn card_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 20.13s
[INFO] running `Command { std: "docker" "inspect" "53bb442d2499d97bd951d3d34b995b89088118feaeca8cb6fc614b23e01145bb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "53bb442d2499d97bd951d3d34b995b89088118feaeca8cb6fc614b23e01145bb", kill_on_drop: false }`
[INFO] [stdout] 53bb442d2499d97bd951d3d34b995b89088118feaeca8cb6fc614b23e01145bb
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.94.0" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] d6d12c148565983e8126acdc5fb32b7d1c737b32eac046bf6254d13a20db54e4
[INFO] running `Command { std: "docker" "start" "-a" "d6d12c148565983e8126acdc5fb32b7d1c737b32eac046bf6254d13a20db54e4", kill_on_drop: false }`
[INFO] [stderr] warning: version requirement `1.0.4+spec-1.1.0` for dependency `toml` includes semver metadata which will be ignored, removing the metadata is recommended to avoid confusion
[INFO] [stderr] warning: private item shadows public glob re-export
[INFO] [stderr]   --> src/lib.rs:2:1
[INFO] [stderr]    |
[INFO] [stderr]  2 | mod config;
[INFO] [stderr]    | ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] note: the name `config` in the type namespace is supposed to be publicly re-exported here
[INFO] [stderr]   --> src/lib.rs:16:9
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub use lua_api::*;
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr] note: but the private item here shadows it
[INFO] [stderr]   --> src/lib.rs:2:1
[INFO] [stderr]    |
[INFO] [stderr]  2 | mod config;
[INFO] [stderr]    | ^^^^^^^^^^^
[INFO] [stderr]    = note: `#[warn(hidden_glob_reexports)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: private item shadows public glob re-export
[INFO] [stderr]   --> src/lib.rs:6:1
[INFO] [stderr]    |
[INFO] [stderr]  6 | mod game;
[INFO] [stderr]    | ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] note: the name `game` in the type namespace is supposed to be publicly re-exported here
[INFO] [stderr]   --> src/lib.rs:15:9
[INFO] [stderr]    |
[INFO] [stderr] 15 | pub use game::*;
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr] note: but the private item here shadows it
[INFO] [stderr]   --> src/lib.rs:6:1
[INFO] [stderr]    |
[INFO] [stderr]  6 | mod game;
[INFO] [stderr]    | ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated function `rand::thread_rng`: Renamed to `rng`
[INFO] [stderr]   --> src/game/game.rs:77:29
[INFO] [stderr]    |
[INFO] [stderr] 77 |         let mut rng = rand::thread_rng();
[INFO] [stderr]    |                             ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(deprecated)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `lua_ctx`
[INFO] [stderr]    --> src/cards/card_def.rs:393:14
[INFO] [stderr]     |
[INFO] [stderr] 393 |             |lua_ctx, builder, (key, effect_ud): (String, mlua::AnyUserData)| {
[INFO] [stderr]     |              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_lua_ctx`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/game/game.rs:35:13
[INFO] [stderr]    |
[INFO] [stderr] 35 |         let mut id_gen = id_generator;
[INFO] [stderr]    |             ----^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Game` is never constructed
[INFO] [stderr]  --> src/game/game.rs:9:12
[INFO] [stderr]   |
[INFO] [stderr] 9 | pub struct Game {
[INFO] [stderr]   |            ^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: enum `GameNewError` is never used
[INFO] [stderr]   --> src/game/game.rs:20:10
[INFO] [stderr]    |
[INFO] [stderr] 20 | pub enum GameNewError {
[INFO] [stderr]    |          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new` and `run` are never used
[INFO] [stderr]    --> src/game/game.rs:26:12
[INFO] [stderr]     |
[INFO] [stderr]  25 | impl Game {
[INFO] [stderr]     | --------- associated items in this implementation
[INFO] [stderr]  26 |     pub fn new(
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 108 |     pub fn run(&mut self) -> Result<(), String> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `card-ai` (lib) generated 8 warnings (run `cargo fix --lib -p card-ai` to apply 2 suggestions)
[INFO] [stderr] warning: `card-ai` (lib test) generated 8 warnings (8 duplicates)
[INFO] [stderr] warning: unused import: `DeckLoadingError`
[INFO] [stderr]  --> src/desk/mod.rs:3:46
[INFO] [stderr]   |
[INFO] [stderr] 3 | pub use deck::{Deck, DeckConfig, DeckLoader, DeckLoadingError, DeckValidationError};
[INFO] [stderr]   |                                              ^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ai_controller::AIPlayerController`
[INFO] [stderr]  --> src/player/mod.rs:8:9
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub use ai_controller::AIPlayerController;
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `cli_controller::CommandLinePlayerController`
[INFO] [stderr]   --> src/player/mod.rs:10:9
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub use cli_controller::CommandLinePlayerController;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `DeckConfig`
[INFO] [stderr]   --> src/main.rs:11:12
[INFO] [stderr]    |
[INFO] [stderr] 11 | use desk::{DeckConfig, DeckLoader};
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `attack` is never read
[INFO] [stderr]   --> src/cards/card_def.rs:49:9
[INFO] [stderr]    |
[INFO] [stderr] 47 | pub struct CharacterCardSpecifics {
[INFO] [stderr]    |            ---------------------- field in this struct
[INFO] [stderr] 48 |     /// 攻击力
[INFO] [stderr] 49 |     pub attack: u32,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CharacterCardSpecifics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: field `strategy_attribute` is never read
[INFO] [stderr]   --> src/cards/card_def.rs:66:9
[INFO] [stderr]    |
[INFO] [stderr] 64 | pub struct StrategyCardSpecifics {
[INFO] [stderr]    |            --------------------- field in this struct
[INFO] [stderr] 65 |     /// 策略属性：普通、诡计、瞬时
[INFO] [stderr] 66 |     pub strategy_attribute: StrategyCardAttribute,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `StrategyCardSpecifics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]   --> src/cards/card_def.rs:70:12
[INFO] [stderr]    |
[INFO] [stderr] 69 | impl StrategyCardSpecifics {
[INFO] [stderr]    | -------------------------- associated function in this implementation
[INFO] [stderr] 70 |     pub fn new(strategy_attr: StrategyCardAttribute) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `item_attribute` is never read
[INFO] [stderr]   --> src/cards/card_def.rs:89:9
[INFO] [stderr]    |
[INFO] [stderr] 87 | pub struct ItemCardSpecifics {
[INFO] [stderr]    |            ----------------- field in this struct
[INFO] [stderr] 88 |     /// 物品属性：普通、存留
[INFO] [stderr] 89 |     pub item_attribute: ItemCardAttribute,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ItemCardSpecifics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/cards/card_def.rs:95:15
[INFO] [stderr]    |
[INFO] [stderr] 95 |     Character(CharacterCardSpecifics),
[INFO] [stderr]    |     --------- ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CardSpecificData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 95 -     Character(CharacterCardSpecifics),
[INFO] [stderr] 95 +     Character(()),
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/cards/card_def.rs:96:14
[INFO] [stderr]    |
[INFO] [stderr] 96 |     Strategy(StrategyCardSpecifics),
[INFO] [stderr]    |     -------- ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CardSpecificData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 96 -     Strategy(StrategyCardSpecifics),
[INFO] [stderr] 96 +     Strategy(()),
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/cards/card_def.rs:97:10
[INFO] [stderr]    |
[INFO] [stderr] 97 |     Item(ItemCardSpecifics),
[INFO] [stderr]    |     ---- ^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CardSpecificData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 97 -     Item(ItemCardSpecifics),
[INFO] [stderr] 97 +     Item(()),
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: fields `attribute`, `fields`, `category`, `cost`, `effects`, and `specific_data` are never read
[INFO] [stderr]    --> src/cards/card_def.rs:109:9
[INFO] [stderr]     |
[INFO] [stderr] 103 | pub struct Card {
[INFO] [stderr]     |            ---- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 109 |     pub attribute: CardAttribute,
[INFO] [stderr]     |         ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 113 |     pub fields: HashMap<String, String>, // 可能需要更具体的类型定义
[INFO] [stderr]     |         ^^^^^^
[INFO] [stderr] 114 |     /// 卡片范畴（数学、科学、文艺、哲学、神秘）
[INFO] [stderr] 115 |     pub category: CardCategory,
[INFO] [stderr]     |         ^^^^^^^^
[INFO] [stderr] 116 |     /// 费用
[INFO] [stderr] 117 |     pub cost: u32,
[INFO] [stderr]     |         ^^^^
[INFO] [stderr] 118 |     /// 效果：HashMap key为e1,e2 以此类推，value为Effect效果对象
[INFO] [stderr] 119 |     pub effects: HashMap<String, Effect>,
[INFO] [stderr]     |         ^^^^^^^
[INFO] [stderr] 120 |     /// 特有属性数据
[INFO] [stderr] 121 |     pub specific_data: CardSpecificData,
[INFO] [stderr]     |         ^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `Card` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new` and `add_effect` are never used
[INFO] [stderr]    --> src/cards/card_def.rs:126:12
[INFO] [stderr]     |
[INFO] [stderr] 124 | impl Card {
[INFO] [stderr]     | --------- associated items in this implementation
[INFO] [stderr] 125 |     /// 创建基本卡片实例的构造函数
[INFO] [stderr] 126 |     pub fn new(
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 161 |     pub fn add_effect(&mut self, key: String, effect: Effect) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/cards/card_def.rs:220:12
[INFO] [stderr]     |
[INFO] [stderr] 198 | impl CardBuilder {
[INFO] [stderr]     | ---------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 220 |     pub fn card_type(mut self, card_type: CardType) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 225 |     pub fn attribute(mut self, attribute: CardAttribute) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 230 |     pub fn name(mut self, name: String) -> Self {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 235 |     pub fn category(mut self, category: CardCategory) -> Self {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 240 |     pub fn cost(mut self, cost: u32) -> Self {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 245 |     pub fn attack(mut self, attack: u32) -> Self {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 250 |     pub fn strategy_attribute(mut self, attr: StrategyCardAttribute) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 255 |     pub fn item_attribute(mut self, attr: ItemCardAttribute) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 260 |     pub fn effect(mut self, key: String, effect: Effect) -> Self {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 265 |     pub fn field(mut self, key: String, value: String) -> Self {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `min` and `actual` are never read
[INFO] [stderr]   --> src/desk/deck.rs:13:25
[INFO] [stderr]    |
[INFO] [stderr] 13 |     InsufficientCards { min: usize, actual: usize },
[INFO] [stderr]    |     -----------------   ^^^         ^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     fields in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `max` and `actual` are never read
[INFO] [stderr]   --> src/desk/deck.rs:15:24
[INFO] [stderr]    |
[INFO] [stderr] 15 |     ExceededMaxCards { max: usize, actual: usize },
[INFO] [stderr]    |     ----------------   ^^^         ^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     fields in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/desk/deck.rs:17:18
[INFO] [stderr]    |
[INFO] [stderr] 17 |     CardNotFound(String),
[INFO] [stderr]    |     ------------ ^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 17 -     CardNotFound(String),
[INFO] [stderr] 17 +     CardNotFound(()),
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: fields `card_id`, `max`, and `actual` are never read
[INFO] [stderr]   --> src/desk/deck.rs:20:9
[INFO] [stderr]    |
[INFO] [stderr] 19 |     ExceededMaxCopies {
[INFO] [stderr]    |     ----------------- fields in this variant
[INFO] [stderr] 20 |         card_id: String,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr] 21 |         max: usize,
[INFO] [stderr]    |         ^^^
[INFO] [stderr] 22 |         actual: usize,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/desk/deck.rs:25:25
[INFO] [stderr]    |
[INFO] [stderr] 25 |     MissingRequiredCard(String),
[INFO] [stderr]    |     ------------------- ^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DeckValidationError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 25 -     MissingRequiredCard(String),
[INFO] [stderr] 25 +     MissingRequiredCard(()),
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: methods `len` and `is_empty` are never used
[INFO] [stderr]    --> src/desk/deck.rs:136:12
[INFO] [stderr]     |
[INFO] [stderr]  64 | impl Deck {
[INFO] [stderr]     | --------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 136 |     pub fn len(&self) -> usize {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 141 |     pub fn is_empty(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `get_deck_by_name` is never used
[INFO] [stderr]    --> src/desk/deck.rs:192:12
[INFO] [stderr]     |
[INFO] [stderr] 148 | impl DeckLoader {
[INFO] [stderr]     | --------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 192 |     pub fn get_deck_by_name(
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `DeckLoadingError` is never used
[INFO] [stderr]    --> src/desk/deck.rs:210:10
[INFO] [stderr]     |
[INFO] [stderr] 210 | pub enum DeckLoadingError {
[INFO] [stderr]     |          ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new_detailed` is never used
[INFO] [stderr]   --> src/effect/effect_def.rs:35:12
[INFO] [stderr]    |
[INFO] [stderr] 19 | impl Effect {
[INFO] [stderr]    | ----------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 35 |     pub fn new_detailed(
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `entity_id`, `original_card`, and `current_card` are never read
[INFO] [stderr]  --> src/entity/card_entity.rs:5:9
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub struct CardEntity {
[INFO] [stderr]   |            ---------- fields in this struct
[INFO] [stderr] 5 |     pub entity_id: u64,
[INFO] [stderr]   |         ^^^^^^^^^
[INFO] [stderr] 6 |     pub original_card: Card,
[INFO] [stderr]   |         ^^^^^^^^^^^^^
[INFO] [stderr] 7 |     pub current_card: Card,
[INFO] [stderr]   |         ^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `CardEntity` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `reset_to_original` is never used
[INFO] [stderr]   --> src/entity/card_entity.rs:20:12
[INFO] [stderr]    |
[INFO] [stderr] 10 | impl CardEntity {
[INFO] [stderr]    | --------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 20 |     pub fn reset_to_original(&mut self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `player_zones` and `id_generator` are never read
[INFO] [stderr]   --> src/game/game.rs:15:9
[INFO] [stderr]    |
[INFO] [stderr]  9 | pub struct Game {
[INFO] [stderr]    |            ---- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 15 |     pub player_zones: Vec<PlayerZones>,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr] 16 |     id_generator: IdGenerator,
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/game/game.rs:21:20
[INFO] [stderr]    |
[INFO] [stderr] 21 |     DeckValidation(DeckValidationError),
[INFO] [stderr]    |     -------------- ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `GameNewError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 21 -     DeckValidation(DeckValidationError),
[INFO] [stderr] 21 +     DeckValidation(()),
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/game/game.rs:22:18
[INFO] [stderr]    |
[INFO] [stderr] 22 |     CardNotFound(String),
[INFO] [stderr]    |     ------------ ^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `GameNewError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 22 -     CardNotFound(String),
[INFO] [stderr] 22 +     CardNotFound(()),
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Opponent` and `Both` are never constructed
[INFO] [stderr]  --> src/player/ask_action.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | pub enum AskAction {
[INFO] [stderr]   |          --------- variants in this enum
[INFO] [stderr] 4 |     CurrentPlayer,
[INFO] [stderr] 5 |     Opponent,
[INFO] [stderr]   |     ^^^^^^^^
[INFO] [stderr] 6 |     Both(Vec<String>),
[INFO] [stderr]   |     ^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `AskAction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `PlayCard`, `UseResource`, `BlockAttack`, and `EndTurn` are never constructed
[INFO] [stderr]  --> src/player/player_action.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | pub enum PlayerAction {
[INFO] [stderr]   |          ------------ variants in this enum
[INFO] [stderr] 3 |     PlayCard(String),
[INFO] [stderr]   |     ^^^^^^^^
[INFO] [stderr] 4 |     Pass,
[INFO] [stderr] 5 |     UseResource(i32),
[INFO] [stderr]   |     ^^^^^^^^^^^
[INFO] [stderr] 6 |     DeclareAttack,
[INFO] [stderr] 7 |     BlockAttack,
[INFO] [stderr]   |     ^^^^^^^^^^^
[INFO] [stderr] 8 |     EndTurn,
[INFO] [stderr]   |     ^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `PlayerAction` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: constant `COST_ZONE_LIMIT` is never used
[INFO] [stderr]  --> src/player/zone.rs:8:11
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub const COST_ZONE_LIMIT: usize = 6;
[INFO] [stderr]   |           ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]   --> src/player/zone.rs:21:12
[INFO] [stderr]    |
[INFO] [stderr] 19 | impl Zone {
[INFO] [stderr]    | --------- associated items in this implementation
[INFO] [stderr] 20 |     /// Create a new zone with unlimited capacity
[INFO] [stderr] 21 |     pub fn new_unlimited() -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 37 |     pub fn add_card(&mut self, card_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 49 |     pub fn remove_card(&mut self, card_id: CardEntityId) -> bool {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 59 |     pub fn cards(&self) -> &Vec<CardEntityId> {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 64 |     pub fn cards_mut(&mut self) -> &mut Vec<CardEntityId> {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 69 |     pub fn len(&self) -> usize {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 74 |     pub fn is_empty(&self) -> bool {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 79 |     pub fn clear(&mut self) {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 84 |     pub fn capacity(&self) -> Option<usize> {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 89 |     pub fn set_capacity(&mut self, capacity: usize) {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/player/zone.rs:148:12
[INFO] [stderr]     |
[INFO] [stderr] 119 | impl PlayerZones {
[INFO] [stderr]     | ---------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 148 |     pub fn add_to_front_line(&mut self, card_entity_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 158 |     pub fn add_to_front_line_position(
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 170 |     pub fn add_to_back_line(&mut self, card_entity_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 180 |     pub fn add_to_back_line_position(
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 192 |     pub fn add_to_cost_zone(&mut self, card_entity_id: CardEntityId) -> Result<(), &'static str> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 202 |     pub fn move_to_graveyard(&mut self, card_entity_id: CardEntityId) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 231 |     pub fn card_count(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `attribute`, `fields`, `category`, `effects`, and `specific_data` are never read
[INFO] [stderr]    --> src/cards/card_def.rs:109:9
[INFO] [stderr]     |
[INFO] [stderr] 103 | pub struct Card {
[INFO] [stderr]     |            ---- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 109 |     pub attribute: CardAttribute,
[INFO] [stderr]     |         ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 113 |     pub fields: HashMap<String, String>, // 可能需要更具体的类型定义
[INFO] [stderr]     |         ^^^^^^
[INFO] [stderr] 114 |     /// 卡片范畴（数学、科学、文艺、哲学、神秘）
[INFO] [stderr] 115 |     pub category: CardCategory,
[INFO] [stderr]     |         ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 119 |     pub effects: HashMap<String, Effect>,
[INFO] [stderr]     |         ^^^^^^^
[INFO] [stderr] 120 |     /// 特有属性数据
[INFO] [stderr] 121 |     pub specific_data: CardSpecificData,
[INFO] [stderr]     |         ^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `Card` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: `card-ai` (bin "card-ai") generated 36 warnings (3 duplicates) (run `cargo fix --bin "card-ai" -p card-ai` to apply 4 suggestions)
[INFO] [stderr] warning: `card-ai` (bin "card-ai" test) generated 36 warnings (35 duplicates)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.14s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/card_ai-8bb198ac7fb2bf35)
[INFO] [stdout] 
[INFO] [stdout] running 2 tests
[INFO] [stdout] test lua_api::load_cards::tests::test_non_lua_files_warning ... ok
[INFO] [stdout] test lua_api::load_cards::tests::test_load_cards_with_test_script ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- lua_api::load_cards::tests::test_load_cards_with_test_script stdout ----
[INFO] [stdout] 执行脚本错误 "/tmp/.tmpKw3ntB/cardscripts/test001.lua": runtime error: src/lua_api/load_cards.rs:46:10: attempt to call a nil value (method 'effect')
[INFO] [stdout] stack traceback:
[INFO] [stdout] 	[C]: in method 'effect'
[INFO] [stdout] 	src/lua_api/load_cards.rs:46:10: in function <src/lua_api/load_cards.rs:46:2>
[INFO] [stdout] 	[C]: in function 'card_define'
[INFO] [stdout] 	src/lua_api/load_cards.rs:46:2: in main chunk
[INFO] [stdout] stack traceback:
[INFO] [stdout] 	[C]: in function 'card_define'
[INFO] [stdout] 	src/lua_api/load_cards.rs:46:2: in main chunk
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] thread 'lua_api::load_cards::tests::test_load_cards_with_test_script' (24) panicked at src/lua_api/load_cards.rs:111:9:
[INFO] [stdout] assertion `left == right` failed
[INFO] [stdout]   left: 0
[INFO] [stdout]  right: 1
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5d9371f5fa92 - std::backtrace_rs::backtrace::libunwind::trace::hff358a60abf734fc
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5d9371f5fa92 - std::backtrace_rs::backtrace::trace_unsynchronized::h3b121f916dd95ec6
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5d9371f5fa92 - std::sys::backtrace::_print_fmt::hde0a62ded68798e9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5d9371f5fa92 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h93773fc827e3113d
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5d9371f6ffca - core::fmt::rt::Argument::fmt::h01eff69902dad97f
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5d9371f6ffca - core::fmt::write::hed7b5c73d82ecb7c
[INFO] [stdout]    6:     0x5d9371f2d546 - std::io::default_write_fmt::h2f696ff5b8bbaa4b
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x5d9371f2d546 - std::io::Write::write_fmt::h5e66814db8a9cfce
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:1994:13
[INFO] [stdout]    8:     0x5d9371f3e9d9 - std::sys::backtrace::BacktraceLock::print::h8b1d6fcc5a56d1a3
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5d9371f3e9d9 - std::panicking::default_hook::{{closure}}::h2be84df4f189ae36
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x5d9371f3e871 - std::panicking::default_hook::hf0ea8939246f43a9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x5d9371e49ade - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h02d35e3888986252
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
[INFO] [stdout]   12:     0x5d9371e49ade - test::test_main_with_exit_callback::{{closure}}::h939640a27d647173
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x5d9371f3ed02 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hc9df09ff391af3e7
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
[INFO] [stdout]   14:     0x5d9371f3ed02 - std::panicking::panic_with_hook::hb4bd9ac1123582a0
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x5d9371f3ea98 - std::panicking::panic_handler::{{closure}}::hde00dd15f5637fe2
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:698:13
[INFO] [stdout]   16:     0x5d9371f39d89 - std::sys::backtrace::__rust_end_short_backtrace::hb72197fa777c1785
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5d9371f2126d - __rustc[4425a7e20b4c8619]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x5d9371f7766c - core::panicking::panic_fmt::ha59b517dd231f4da
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5d9371f77523 - core::panicking::assert_failed_inner::h3c3301979dc81b81
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:439:17
[INFO] [stdout]   20:     0x5d9371f773b3 - core::panicking::assert_failed::h59d9a1fd9655a77e
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:394:5
[INFO] [stdout]   21:     0x5d9371e0f4e0 - card_ai::lua_api::load_cards::tests::test_load_cards_with_test_script::h25c0f614e37001a8
[INFO] [stdout]                                at /opt/rustwide/workdir/src/lua_api/load_cards.rs:111:9
[INFO] [stdout]   22:     0x5d9371e0f737 - card_ai::lua_api::load_cards::tests::test_load_cards_with_test_script::{{closure}}::hd1df8b5804827397
[INFO] [stdout]                                at /opt/rustwide/workdir/src/lua_api/load_cards.rs:77:42
[INFO] [stdout]   23:     0x5d9371e09ca6 - core::ops::function::FnOnce::call_once::h8a7aa02d51880b86
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x5d9371e4989b - core::ops::function::FnOnce::call_once::hddb3cd395c36bfbb
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   25:     0x5d9371e4989b - test::__rust_begin_short_backtrace::h0b6a7601d9750bfa
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:663:18
[INFO] [stdout]   26:     0x5d9371e5d2aa - test::run_test_in_process::{{closure}}::h444209903f00b347
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:74
[INFO] [stdout]   27:     0x5d9371e5d2aa - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hfb3ba8f46e537649
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   28:     0x5d9371e5d2aa - std::panicking::catch_unwind::do_call::h1672a45911fcf9dc
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
[INFO] [stdout]   29:     0x5d9371e5d2aa - std::panicking::catch_unwind::h0fadaee22787a6dd
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
[INFO] [stdout]   30:     0x5d9371e5d2aa - std::panic::catch_unwind::hc47ad190f2c8e188
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
[INFO] [stdout]   31:     0x5d9371e5d2aa - test::run_test_in_process::hcd7faaf934f29999
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:27
[INFO] [stdout]   32:     0x5d9371e5d2aa - test::run_test::{{closure}}::hddc4550da4871867
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:607:43
[INFO] [stdout]   33:     0x5d9371e37704 - test::run_test::{{closure}}::h98ae26689f13ed94
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:637:41
[INFO] [stdout]   34:     0x5d9371e37704 - std::sys::backtrace::__rust_begin_short_backtrace::h3ec4d1f21ad44588
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   35:     0x5d9371e3b0a2 - std::thread::lifecycle::spawn_unchecked::{{closure}}::{{closure}}::hd8bf2c73d479939f
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   36:     0x5d9371e3b0a2 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h3b4248f358af2491
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   37:     0x5d9371e3b0a2 - std::panicking::catch_unwind::do_call::hda10a64f4b8daebe
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
[INFO] [stdout]   38:     0x5d9371e3b0a2 - std::panicking::catch_unwind::h659e5ee8336ec8c7
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
[INFO] [stdout]   39:     0x5d9371e3b0a2 - std::panic::catch_unwind::h9d4d66a538912c18
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
[INFO] [stdout]   40:     0x5d9371e3b0a2 - std::thread::lifecycle::spawn_unchecked::{{closure}}::h7557906bb51d79f1
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   41:     0x5d9371e3b0a2 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h9e460d1d7fc83d35
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   42:     0x5d9371f34edf - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h61282da819d64ea9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2206:9
[INFO] [stdout]   43:     0x5d9371f34edf - std::sys::thread::unix::Thread::new::thread_start::h982f9ea829d1b5fb
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/thread/unix.rs:127:17
[INFO] [stdout]   44:     0x7c2e92375aa4 - <unknown>
[INFO] [stdout]   45:     0x7c2e92402a64 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     lua_api::load_cards::tests::test_load_cards_with_test_script
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--lib`
[INFO] running `Command { std: "docker" "inspect" "d6d12c148565983e8126acdc5fb32b7d1c737b32eac046bf6254d13a20db54e4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d6d12c148565983e8126acdc5fb32b7d1c737b32eac046bf6254d13a20db54e4", kill_on_drop: false }`
[INFO] [stdout] d6d12c148565983e8126acdc5fb32b7d1c737b32eac046bf6254d13a20db54e4
