[INFO] cloning repository https://github.com/Focasius/Hydrogen
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Focasius/Hydrogen" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FFocasius%2FHydrogen", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FFocasius%2FHydrogen'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 5db67a77095dd1ea787ea9ea4724d32d95c16bc3
[INFO] checking Focasius/Hydrogen/5db67a77095dd1ea787ea9ea4724d32d95c16bc3 against master#2ca7bcd03b87b52f7055a59b817443b0ac4a530d for pr-150322
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FFocasius%2FHydrogen" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Focasius/Hydrogen
[INFO] finished tweaking git repo https://github.com/Focasius/Hydrogen
[INFO] tweaked toml for git repo https://github.com/Focasius/Hydrogen written to /workspace/builds/worker-7-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Focasius/Hydrogen on toolchain 2ca7bcd03b87b52f7055a59b817443b0ac4a530d
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+2ca7bcd03b87b52f7055a59b817443b0ac4a530d" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+2ca7bcd03b87b52f7055a59b817443b0ac4a530d" "generate-lockfile" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]      Locking 97 packages to latest compatible versions
[INFO] [stderr]       Adding rand v0.8.5 (available: v0.9.2)
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+2ca7bcd03b87b52f7055a59b817443b0ac4a530d" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+2ca7bcd03b87b52f7055a59b817443b0ac4a530d" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 2b9fc48a72a09a6f5358d49a2fa24ffd15cc6dd35d66b7aac044adb01bb70887
[INFO] running `Command { std: "docker" "start" "-a" "2b9fc48a72a09a6f5358d49a2fa24ffd15cc6dd35d66b7aac044adb01bb70887", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "2b9fc48a72a09a6f5358d49a2fa24ffd15cc6dd35d66b7aac044adb01bb70887", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2b9fc48a72a09a6f5358d49a2fa24ffd15cc6dd35d66b7aac044adb01bb70887", kill_on_drop: false }`
[INFO] [stdout] 2b9fc48a72a09a6f5358d49a2fa24ffd15cc6dd35d66b7aac044adb01bb70887
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-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=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+2ca7bcd03b87b52f7055a59b817443b0ac4a530d" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 76bbcfa9c44d5318bfb67f0157f671f1585aee4537e2833859508cd5748734ad
[INFO] running `Command { std: "docker" "start" "-a" "76bbcfa9c44d5318bfb67f0157f671f1585aee4537e2833859508cd5748734ad", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.178
[INFO] [stderr]     Checking aho-corasick v1.1.4
[INFO] [stderr]    Compiling syn v2.0.112
[INFO] [stderr]    Compiling serde_json v1.0.148
[INFO] [stderr]     Checking winnow v0.7.14
[INFO] [stderr]     Checking serde_spanned v1.0.4
[INFO] [stderr]     Checking toml_datetime v0.7.5+spec-1.1.0
[INFO] [stderr]     Checking jiff v0.2.17
[INFO] [stderr]     Checking toml_writer v1.0.6+spec-1.1.0
[INFO] [stderr]     Checking colored v3.0.0
[INFO] [stderr]     Checking regex-automata v0.4.13
[INFO] [stderr]     Checking getrandom v0.2.16
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking toml_parser v1.0.6+spec-1.1.0
[INFO] [stderr]     Checking toml v0.9.10+spec-1.1.0
[INFO] [stderr]     Checking regex v1.12.2
[INFO] [stderr]     Checking env_filter v0.1.4
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v2.0.17
[INFO] [stderr]    Compiling clap_derive v4.5.49
[INFO] [stderr]     Checking env_logger v0.11.8
[INFO] [stderr]     Checking thiserror v2.0.17
[INFO] [stderr]     Checking clap v4.5.53
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking chrono v0.4.42
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking hydrogen v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `log::info`
[INFO] [stdout]    --> src/network/client.rs:118:13
[INFO] [stdout]     |
[INFO] [stdout] 118 |         use log::info;
[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: `log::info`
[INFO] [stdout]    --> src/network/client.rs:118:13
[INFO] [stdout]     |
[INFO] [stdout] 118 |         use log::info;
[INFO] [stdout]     |             ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start` is never used
[INFO] [stdout]    --> src/client/repl.rs:213:8
[INFO] [stdout]     |
[INFO] [stdout] 213 | pub fn start() -> Result<()> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NetworkConfig` is never constructed
[INFO] [stdout]    --> src/network/mod.rs:131:12
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub struct NetworkConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `receive_message` and `disconnect` are never used
[INFO] [stdout]    --> src/network/mod.rs:154:8
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub trait NetworkManager {
[INFO] [stdout]     |           -------------- methods in this trait
[INFO] [stdout] 153 |     fn send_message(&mut self, message: NetworkMessage) -> Result<()>;
[INFO] [stdout] 154 |     fn receive_message(&mut self) -> Result<Option<NetworkMessage>>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 155 |     fn is_connected(&self) -> bool;
[INFO] [stdout] 156 |     fn disconnect(&mut self) -> Result<()>;
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `serialize_message` is never used
[INFO] [stdout]    --> src/network/mod.rs:160:8
[INFO] [stdout]     |
[INFO] [stdout] 160 | pub fn serialize_message(message: &NetworkMessage) -> Result<Vec<u8>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `deserialize_message` is never used
[INFO] [stdout]    --> src/network/mod.rs:166:8
[INFO] [stdout]     |
[INFO] [stdout] 166 | pub fn deserialize_message(data: &[u8]) -> Result<NetworkMessage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NetworkClient` is never constructed
[INFO] [stdout]   --> src/network/client.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct NetworkClient {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `connect`, `start_receive_thread`, `get_messages`, `set_player_id`, and `player_id` are never used
[INFO] [stdout]    --> src/network/client.rs:20:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl NetworkClient {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  19 |     /// 创建新的网络客户端
[INFO] [stdout]  20 |     pub fn new(address: &str) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  31 |     pub fn connect(&mut self, username: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     fn start_receive_thread(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub fn get_messages(&mut self) -> Vec<NetworkMessage> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn set_player_id(&mut self, player_id: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn player_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PROTOCOL_VERSION` is never used
[INFO] [stdout]  --> src/network/protocol.rs:5:11
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub const PROTOCOL_VERSION: u32 = 1;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MessageHeader` is never constructed
[INFO] [stdout]  --> src/network/protocol.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct MessageHeader {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MessageType` is never used
[INFO] [stdout]   --> src/network/protocol.rs:19:10
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub enum MessageType {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ControlMessage` is never used
[INFO] [stdout]   --> src/network/protocol.rs:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub enum ControlMessage {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DataMessage` is never constructed
[INFO] [stdout]   --> src/network/protocol.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct DataMessage {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DataType` is never used
[INFO] [stdout]   --> src/network/protocol.rs:46:10
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub enum DataType {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AckMessage` is never constructed
[INFO] [stdout]   --> src/network/protocol.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct AckMessage {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NackMessage` is never constructed
[INFO] [stdout]   --> src/network/protocol.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct NackMessage {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ErrorCode` is never used
[INFO] [stdout]   --> src/network/protocol.rs:70:10
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub enum ErrorCode {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HeartbeatMessage` is never constructed
[INFO] [stdout]   --> src/network/protocol.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct HeartbeatMessage {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProtocolHandler` is never constructed
[INFO] [stdout]   --> src/network/protocol.rs:91:12
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub struct ProtocolHandler {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/network/protocol.rs:98:12
[INFO] [stdout]     |
[INFO] [stdout]  96 | impl ProtocolHandler {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  97 |     /// 创建新的协议处理器
[INFO] [stdout]  98 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn create_header(&mut self, message_type: MessageType) -> MessageHeader {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn validate_header(&mut self, header: &MessageHeader) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn calculate_checksum(data: &[u8]) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 159 |     pub fn verify_checksum(data: &[u8], expected_checksum: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     fn current_timestamp() -> u64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn pack_message<T: Serialize>(message: &T) -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn unpack_message<T: for<'a> Deserialize<'a>>(data: &[u8]) -> Result<T> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     pub fn compress_data(data: &[u8]) -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     pub fn decompress_data(data: &[u8]) -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_MESSAGE_SIZE` is never used
[INFO] [stdout]    --> src/network/protocol.rs:201:15
[INFO] [stdout]     |
[INFO] [stdout] 201 |     pub const MAX_MESSAGE_SIZE: usize = 1024 * 1024; // 1MB
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_SEQUENCE_GAP` is never used
[INFO] [stdout]    --> src/network/protocol.rs:202:15
[INFO] [stdout]     |
[INFO] [stdout] 202 |     pub const MAX_SEQUENCE_GAP: u32 = 10;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HEARTBEAT_INTERVAL` is never used
[INFO] [stdout]    --> src/network/protocol.rs:203:15
[INFO] [stdout]     |
[INFO] [stdout] 203 |     pub const HEARTBEAT_INTERVAL: u64 = 30000; // 30秒
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CONNECTION_TIMEOUT` is never used
[INFO] [stdout]    --> src/network/protocol.rs:204:15
[INFO] [stdout]     |
[INFO] [stdout] 204 |     pub const CONNECTION_TIMEOUT: u64 = 120000; // 2分钟
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_control_message` is never used
[INFO] [stdout]    --> src/network/protocol.rs:212:12
[INFO] [stdout]     |
[INFO] [stdout] 212 |     pub fn create_control_message(control_type: ControlMessage) -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_control_message` is never used
[INFO] [stdout]    --> src/network/protocol.rs:228:12
[INFO] [stdout]     |
[INFO] [stdout] 228 |     pub fn parse_control_message(data: &[u8]) -> Result<(MessageHeader, ControlMessage)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_data_message` is never used
[INFO] [stdout]    --> src/network/protocol.rs:234:12
[INFO] [stdout]     |
[INFO] [stdout] 234 |     pub fn create_data_message(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_heartbeat_message` is never used
[INFO] [stdout]    --> src/network/protocol.rs:254:12
[INFO] [stdout]     |
[INFO] [stdout] 254 |     pub fn create_heartbeat_message() -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ClientConnection` is never constructed
[INFO] [stdout]   --> src/network/server.rs:11:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | struct ClientConnection {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NetworkServer` is never constructed
[INFO] [stdout]   --> src/network/server.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct NetworkServer {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/network/server.rs:32:12
[INFO] [stdout]     |
[INFO] [stdout]  30 | impl NetworkServer {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  31 |     /// 创建新的网络服务器
[INFO] [stdout]  32 |     pub fn new(address: &str, port: u16) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  45 |     pub fn start(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn stop(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     fn start_accept_thread(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     fn start_heartbeat_thread(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn get_messages(&mut self) -> Vec<(u32, NetworkMessage)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn send_to_client(&mut self, player_id: u32, message: NetworkMessage) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn broadcast(&mut self, message: NetworkMessage) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn client_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn is_running(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_client` is never used
[INFO] [stdout]    --> src/network/server.rs:256:4
[INFO] [stdout]     |
[INFO] [stdout] 256 | fn handle_client(
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LocalNetworkServer` is never constructed
[INFO] [stdout]    --> src/network/server.rs:351:12
[INFO] [stdout]     |
[INFO] [stdout] 351 | pub struct LocalNetworkServer {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/network/server.rs:359:12
[INFO] [stdout]     |
[INFO] [stdout] 357 | impl LocalNetworkServer {
[INFO] [stdout]     | ----------------------- associated items in this implementation
[INFO] [stdout] 358 |     /// 创建新的本地网络服务器
[INFO] [stdout] 359 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 368 |     pub fn start(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 378 |     pub fn stop(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 390 |     pub fn get_messages(&mut self) -> Vec<(u32, NetworkMessage)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 396 |     pub fn handle_connect(&mut self, username: &str) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 414 |     pub fn handle_message(&mut self, player_id: u32, message: NetworkMessage) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 471 |     pub fn send_to_client(&mut self, player_id: u32, message: NetworkMessage) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 483 |     pub fn client_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 488 |     pub fn is_running(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `stop` is never used
[INFO] [stdout]   --> src/server/mod.rs:54:8
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub fn stop() -> Result<()> {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `default` is never used
[INFO] [stdout]   --> src/server/config.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 69 | impl Config {
[INFO] [stdout]    | ----------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn default() -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `with_default` is never used
[INFO] [stdout]    --> src/server/config.rs:160:12
[INFO] [stdout]     |
[INFO] [stdout] 146 | impl ConfigManager {
[INFO] [stdout]     | ------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn with_default() -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_CONFIG` is never used
[INFO] [stdout]    --> src/server/config.rs:172:7
[INFO] [stdout]     |
[INFO] [stdout] 172 | const DEFAULT_CONFIG: &str = r#"
[INFO] [stdout]     |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `players` is never read
[INFO] [stdout]   --> src/server/game.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Game {
[INFO] [stdout]    |            ---- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub players: HashMap<u32, Player>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Game` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `stop`, `current_turn`, `is_running`, and `config_manager` are never used
[INFO] [stdout]    --> src/server/game.rs:406:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl Game {
[INFO] [stdout]     | --------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 406 |     pub fn stop(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 413 |     pub fn current_turn(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 418 |     pub fn is_running(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 451 |     pub fn config_manager(&self) -> &ConfigManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CityType` is never used
[INFO] [stdout]  --> src/server/models/city.rs:7:10
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum CityType {
[INFO] [stdout]   |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BuildingType` is never used
[INFO] [stdout]   --> src/server/models/city.rs:20:10
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub enum BuildingType {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BuildingLevel` is never used
[INFO] [stdout]   --> src/server/models/city.rs:39:10
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub enum BuildingLevel {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CityStatus` is never used
[INFO] [stdout]   --> src/server/models/city.rs:49:10
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub enum CityStatus {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `City` is never constructed
[INFO] [stdout]   --> src/server/models/city.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct City {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/models/city.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 112 | impl City {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout] 113 |     /// 创建新城�?
[INFO] [stdout] 114 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     pub fn id(&self) -> u32 {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn city_type(&self) -> CityType {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     pub fn set_city_type(&mut self, city_type: CityType) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn status(&self) -> CityStatus {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub fn set_status(&mut self, status: CityStatus) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 223 |     pub fn province_id(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     pub fn country_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn set_country_id(&mut self, country_id: Option<u32>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 238 |     pub fn location(&self) -> (f32, f32) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 243 |     pub fn population(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn update_population(&mut self, change: i32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn population_density(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn set_population_density(&mut self, density: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 276 |     pub fn growth_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 281 |     pub fn set_growth_rate(&mut self, rate: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     pub fn base_tax(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub fn calculate_actual_tax(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 299 |     pub fn production_value(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 304 |     pub fn trade_value(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     pub fn unemployment_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 314 |     pub fn set_unemployment_rate(&mut self, rate: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn buildings(&self) -> &HashMap<BuildingType, BuildingLevel> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub fn get_building_level(&self, building_type: BuildingType) -> BuildingLevel {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 338 |     pub fn build_or_upgrade(&mut self, building_type: BuildingType) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 386 |     pub fn demolish_building(&mut self, building_type: BuildingType) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 414 |     pub fn infrastructure_level(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 419 |     pub fn upgrade_infrastructure(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 431 |     pub fn housing_level(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 436 |     pub fn upgrade_housing(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn sanitation_level(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn upgrade_sanitation(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 465 |     pub fn literacy_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 470 |     pub fn set_literacy_rate(&mut self, rate: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 481 |     pub fn education_quality(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 486 |     pub fn improve_education(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 500 |     pub fn crime_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 505 |     pub fn reduce_crime(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 518 |     pub fn stability(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 523 |     pub fn set_stability(&mut self, stability: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 534 |     pub fn public_order(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 539 |     pub fn improve_public_order(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     pub fn is_coastal(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 556 |     pub fn has_port(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 561 |     pub fn build_port(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 579 |     pub fn is_capital(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 584 |     pub fn set_capital(&mut self, is_capital: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 595 |     pub fn is_trade_center(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 600 |     pub fn set_trade_center(&mut self, is_trade_center: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 609 |     pub fn development_index(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 614 |     pub fn recalculate_development_index(&mut self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 636 |     pub fn monthly_update(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 724 |     fn update_city_status(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 741 |     fn calculate_city_score(&self) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 771 |     pub fn get_summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CityBuilder` is never constructed
[INFO] [stdout]    --> src/server/models/city.rs:807:12
[INFO] [stdout]     |
[INFO] [stdout] 807 | pub struct CityBuilder {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/models/city.rs:822:12
[INFO] [stdout]     |
[INFO] [stdout] 820 | impl CityBuilder {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 821 |     /// 创建新的城市构建�?
[INFO] [stdout] 822 |     pub fn new(id: u32, name: String, province_id: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 838 |     pub fn location(mut self, latitude: f32, longitude: f32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 845 |     pub fn population(mut self, population: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 851 |     pub fn coastal(mut self, is_coastal: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 857 |     pub fn capital(mut self, is_capital: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 863 |     pub fn trade_center(mut self, is_trade_center: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 869 |     pub fn add_building(mut self, building_type: BuildingType) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 875 |     pub fn build(self) -> Result<City> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/server/models/country.rs:57:12
[INFO] [stdout]     |
[INFO] [stdout]  55 | impl CountryStatus {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout]  56 |     /// 获取稳定度
[INFO] [stdout]  57 |     pub fn stability(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn stability_mut(&mut self) -> &mut f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn war_exhaustion(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     pub fn war_exhaustion_mut(&mut self) -> &mut f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn inflation(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn inflation_mut(&mut self) -> &mut f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn corruption(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub fn corruption_mut(&mut self) -> &mut f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn prestige(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn prestige_mut(&mut self) -> &mut f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn legitimacy(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn legitimacy_mut(&mut self) -> &mut f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/server/models/country.rs:267:12
[INFO] [stdout]     |
[INFO] [stdout] 197 | impl Country {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 267 |     pub fn id(&self) -> u32 {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn government_type(&self) -> GovernmentType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     pub fn ideology(&self) -> Ideology {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub fn stability(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn set_stability(&mut self, stability: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 341 |     pub fn tax_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 346 |     pub fn set_tax_rate(&mut self, rate: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 420 |     pub fn manpower(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 425 |     pub fn max_manpower(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 430 |     pub fn owned_provinces(&self) -> &HashSet<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 444 |     pub fn remove_province(&mut self, province_id: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 451 |     pub fn is_core_province(&self, province_id: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 456 |     pub fn education_level(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 461 |     pub fn set_education_level(&mut self, level: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 472 |     pub fn literacy_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 477 |     pub fn set_literacy_rate(&mut self, rate: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 493 |     pub fn get_diplomatic_relation(&self, target_country_id: u32) -> Option<&DiplomaticRelation> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 498 |     pub fn set_diplomatic_relation(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 508 |     pub fn declare_war(&mut self, target_country_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 527 |     pub fn propose_peace(&mut self, target_country_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 538 |     pub fn sign_trade_agreement(&mut self, target_country_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 649 |     pub fn research_technology(&mut self, technology_id: String, cost: f32) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 669 |     pub fn has_technology(&self, technology_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 674 |     pub fn get_power_score(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 696 |     pub fn get_summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 726 |     pub fn status_mut(&mut self) -> &mut CountryStatus {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 731 |     pub fn economy_mut(&mut self) -> &mut Economy {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 736 |     pub fn diplomatic_relations_mut(&mut self) -> &mut HashMap<u32, DiplomaticRelation> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 741 |     pub fn technologies(&self) -> &HashSet<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 751 |     pub fn set_research_points(&mut self, points: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 761 |     pub fn set_government_type(&mut self, government_type: GovernmentType) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 766 |     pub fn set_ideology(&mut self, ideology: Ideology) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 771 |     pub fn legitimacy(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 776 |     pub fn set_legitimacy(&mut self, legitimacy: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 787 |     pub fn prestige(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 792 |     pub fn set_prestige(&mut self, prestige: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 803 |     pub fn corruption(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 808 |     pub fn set_corruption(&mut self, corruption: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CountryBuilder` is never constructed
[INFO] [stdout]    --> src/server/models/country.rs:821:12
[INFO] [stdout]     |
[INFO] [stdout] 821 | pub struct CountryBuilder {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/models/country.rs:835:12
[INFO] [stdout]     |
[INFO] [stdout] 833 | impl CountryBuilder {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 834 |     /// 创建新的国家构建�?
[INFO] [stdout] 835 |     pub fn new(id: u32, name: String, tag: String) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 850 |     pub fn government_type(mut self, government_type: GovernmentType) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 856 |     pub fn ideology(mut self, ideology: Ideology) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 862 |     pub fn starting_treasury(mut self, treasury: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 868 |     pub fn starting_gdp(mut self, gdp: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 874 |     pub fn starting_army(mut self, army_size: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 880 |     pub fn add_core_province(mut self, province_id: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 886 |     pub fn build(self) -> Result<Country> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/models/player.rs:146:12
[INFO] [stdout]     |
[INFO] [stdout] 144 | impl Player {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] 145 |     /// 创建新玩�?
[INFO] [stdout] 146 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn id(&self) -> u32 {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 235 |     pub fn username(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn display_name(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 245 |     pub fn player_type(&self) -> PlayerType {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn status(&self) -> PlayerStatus {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |     pub fn set_status(&mut self, status: PlayerStatus) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |     pub fn permission_level(&self) -> PermissionLevel {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn set_permission_level(&mut self, level: PermissionLevel) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 273 |     pub fn country_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn set_country(&mut self, country_id: Option<u32>) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn add_controlled_country(&mut self, country_id: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn remove_controlled_country(&mut self, country_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     pub fn controlled_countries(&self) -> &HashSet<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 314 |     pub fn controls_country(&self, country_id: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 319 |     pub fn current_turn(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 324 |     pub fn set_current_turn(&mut self, turn: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 329 |     pub fn turn_completed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 334 |     pub fn set_turn_completed(&mut self, completed: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 344 |     pub fn action_points(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 349 |     pub fn consume_action_points(&mut self, points: u32) -> Result<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 361 |     pub fn restore_action_points(&mut self, points: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 366 |     pub fn reset_action_points(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 373 |     pub fn score(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 378 |     pub fn update_score(&mut self, delta: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 386 |     pub fn join_time(&self) -> DateTime<Utc> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 391 |     pub fn last_active(&self) -> DateTime<Utc> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 396 |     pub fn update_last_active(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 401 |     pub fn action_history(&self) -> &Vec<PlayerAction> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 406 |     pub fn recent_actions(&self, limit: usize) -> Vec<&PlayerAction> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 417 |     pub fn record_action(
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     pub fn stats(&self) -> &PlayerStats {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn update_stats<F>(&mut self, updater: F)
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 456 |     pub fn preferences(&self) -> &PlayerPreferences {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 461 |     pub fn preferences_mut(&mut self) -> &mut PlayerPreferences {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 466 |     pub fn update_preferences<F>(&mut self, updater: F)
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 474 |     pub fn ai_settings(&self) -> Option<&AISettings> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 479 |     pub fn ai_settings_mut(&mut self) -> Option<&mut AISettings> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 484 |     pub fn update_ai_settings<F>(&mut self, updater: F) -> Result<()>
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 499 |     pub fn ip_address(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 504 |     pub fn set_ip_address(&mut self, ip_address: Option<String>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 509 |     pub fn session_id(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 514 |     pub fn set_session_id(&mut self, session_id: Option<String>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 519 |     pub fn commands_this_turn(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 524 |     pub fn pending_actions(&self) -> &Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 529 |     pub fn add_pending_action(&mut self, action: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 534 |     pub fn clear_pending_actions(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 539 |     pub fn is_online(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 544 |     pub fn is_ai(&self) -> bool {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 549 |     pub fn is_human(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 554 |     pub fn is_admin(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 562 |     pub fn can_take_action(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 567 |     pub fn calculate_activity_score(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 589 |     pub fn get_summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 635 |     pub fn execute_ai_turn(&mut self) -> Result<Vec<String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 722 |     pub fn serialize(&self) -> Result<String> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 728 |     pub fn deserialize(data: &str) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PlayerBuilder` is never constructed
[INFO] [stdout]    --> src/server/models/player.rs:736:12
[INFO] [stdout]     |
[INFO] [stdout] 736 | pub struct PlayerBuilder {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/models/player.rs:750:12
[INFO] [stdout]     |
[INFO] [stdout] 748 | impl PlayerBuilder {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 749 |     /// 创建新的玩家构建�?
[INFO] [stdout] 750 |     pub fn new(id: u32, username: String) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 765 |     pub fn display_name(mut self, display_name: String) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 771 |     pub fn player_type(mut self, player_type: PlayerType) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 777 |     pub fn permission_level(mut self, permission_level: PermissionLevel) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 783 |     pub fn country_id(mut self, country_id: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 789 |     pub fn ai_settings(mut self, ai_settings: AISettings) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 795 |     pub fn ip_address(mut self, ip_address: String) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 801 |     pub fn session_id(mut self, session_id: String) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 807 |     pub fn build(self) -> Result<Player> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/server/models/province.rs:138:12
[INFO] [stdout]     |
[INFO] [stdout]  85 | impl Province {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn id(&self) -> u32 {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn owner_country_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub fn set_owner(&mut self, country_id: Option<u32>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn province_type(&self) -> ProvinceType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn set_province_type(&mut self, province_type: ProvinceType) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn status(&self) -> ProvinceStatus {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn set_status(&mut self, status: ProvinceStatus) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn population(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub fn literacy_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub fn set_literacy_rate(&mut self, rate: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn education_level(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn set_education_level(&mut self, level: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn loyalty(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub fn set_loyalty(&mut self, loyalty: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 243 |     pub fn base_tax(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn calculate_actual_tax(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 254 |     pub fn resources(&self) -> &HashMap<ResourceType, u32> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn get_resource(&self, resource_type: ResourceType) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 269 |     pub fn consume_resource(&mut self, resource_type: ResourceType, amount: u32) -> Result<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub fn resource_production(&self) -> &HashMap<ResourceType, u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn get_resource_production(&self, resource_type: ResourceType) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 295 |     pub fn set_resource_production(&mut self, resource_type: ResourceType, amount: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn garrison_size(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 305 |     pub fn set_garrison_size(&mut self, size: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 310 |     pub fn fort_level(&self) -> u8 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 315 |     pub fn upgrade_fort(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 327 |     pub fn autonomy(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     pub fn set_autonomy(&mut self, autonomy: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 343 |     pub fn corruption(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 348 |     pub fn set_corruption(&mut self, corruption: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 359 |     pub fn infrastructure(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     pub fn set_infrastructure(&mut self, infrastructure: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 375 |     pub fn development_level(&self) -> u8 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     pub fn increase_development(&mut self, amount: u8) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 394 |     pub fn is_coastal(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 399 |     pub fn has_port(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 404 |     pub fn build_port(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 415 |     pub fn destroy_port(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 471 |     pub fn get_summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProvinceBuilder` is never constructed
[INFO] [stdout]    --> src/server/models/province.rs:498:12
[INFO] [stdout]     |
[INFO] [stdout] 498 | pub struct ProvinceBuilder {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/models/province.rs:512:12
[INFO] [stdout]     |
[INFO] [stdout] 510 | impl ProvinceBuilder {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 511 |     /// 创建新的省份构建�?
[INFO] [stdout] 512 |     pub fn new(id: u32, name: String) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 527 |     pub fn population(mut self, population: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 533 |     pub fn development_level(mut self, development_level: u8) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 539 |     pub fn terrain(mut self, terrain: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 545 |     pub fn climate(mut self, climate: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     pub fn coastal(mut self, coastal: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 557 |     pub fn add_resource(mut self, resource_type: ResourceType, amount: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 563 |     pub fn add_resource_production(mut self, resource_type: ResourceType, amount: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 569 |     pub fn build(self) -> Result<Province> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_defense_bonus` and `get_strategic_value` are never used
[INFO] [stdout]    --> src/server/models/province.rs:597:12
[INFO] [stdout]     |
[INFO] [stdout] 595 | impl Province {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout] 596 |     /// 获取省份战斗力加成（基于堡垒、地形等�?
[INFO] [stdout] 597 |     pub fn get_defense_bonus(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 624 |     pub fn get_strategic_value(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DiplomaticProposal` is never used
[INFO] [stdout]   --> src/server/operations/diplomacy.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum DiplomaticProposal {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Proposal` is never constructed
[INFO] [stdout]   --> src/server/operations/diplomacy.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct Proposal {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ProposalStatus` is never used
[INFO] [stdout]   --> src/server/operations/diplomacy.rs:36:10
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub enum ProposalStatus {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `War` is never constructed
[INFO] [stdout]   --> src/server/operations/diplomacy.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub struct War {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `WarStatus` is never used
[INFO] [stdout]   --> src/server/operations/diplomacy.rs:60:10
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub enum WarStatus {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DiplomacyManager` is never constructed
[INFO] [stdout]   --> src/server/operations/diplomacy.rs:69:12
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub struct DiplomacyManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/operations/diplomacy.rs:78:12
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl DiplomacyManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout]  77 |     /// 创建新的外交管理�?
[INFO] [stdout]  78 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub fn send_proposal(
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn accept_proposal(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     pub fn reject_proposal(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub fn declare_war(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 321 |     pub fn propose_peace(
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     fn sign_peace_treaty(&mut self, country1: &mut Country, country2: &mut Country) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 407 |     pub fn form_alliance(&mut self, country1: &mut Country, country2: &mut Country) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 456 |     pub fn sign_non_aggression_pact(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 494 |     pub fn sign_trade_agreement(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 549 |     pub fn grant_military_access(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 584 |     pub fn improve_relations(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 602 |     pub fn worsen_relations(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 620 |     fn update_relation_value(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 660 |     pub fn calculate_compatibility(country1: &Country, country2: &Country) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 700 |     pub fn proposals(&self) -> &HashMap<u32, Proposal> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 705 |     pub fn wars(&self) -> &HashMap<u32, War> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 710 |     pub fn get_wars_by_country(&self, country_id: u32) -> Vec<&War> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 721 |     pub fn update_war_score(&mut self, war_id: u32, delta: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 732 |     pub fn end_war(&mut self, war_id: u32, victor_country_id: Option<u32>) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 766 |     pub fn monthly_update(&mut self, countries: &mut HashMap<u32, Country>) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_secular` is never used
[INFO] [stdout]    --> src/server/operations/diplomacy.rs:921:12
[INFO] [stdout]     |
[INFO] [stdout] 920 | impl Ideology {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] 921 |     pub fn is_secular(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_secular` is never used
[INFO] [stdout]    --> src/server/operations/diplomacy.rs:931:12
[INFO] [stdout]     |
[INFO] [stdout] 930 | impl GovernmentType {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] 931 |     pub fn is_secular(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_country_secular` is never used
[INFO] [stdout]    --> src/server/operations/diplomacy.rs:937:8
[INFO] [stdout]     |
[INFO] [stdout] 937 | pub fn is_country_secular(country: &Country) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EducationPolicy` is never used
[INFO] [stdout]  --> src/server/operations/education.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub enum EducationPolicy {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ResearchField` is never used
[INFO] [stdout]   --> src/server/operations/education.rs:17:10
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum ResearchField {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ResearchStatus` is never used
[INFO] [stdout]   --> src/server/operations/education.rs:28:10
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum ResearchStatus {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResearchProject` is never constructed
[INFO] [stdout]   --> src/server/operations/education.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub struct ResearchProject {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `InstitutionType` is never used
[INFO] [stdout]   --> src/server/operations/education.rs:52:10
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub enum InstitutionType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EducationalInstitution` is never constructed
[INFO] [stdout]   --> src/server/operations/education.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub struct EducationalInstitution {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EducationSystem` is never constructed
[INFO] [stdout]   --> src/server/operations/education.rs:76:12
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub struct EducationSystem {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/operations/education.rs:88:12
[INFO] [stdout]     |
[INFO] [stdout]  86 | impl EducationSystem {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  87 |     /// 创建新的教育系统
[INFO] [stdout]  88 |     pub fn new(country_id: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn set_budget(&mut self, budget: f64) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn set_education_policy(&mut self, policy: EducationPolicy) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub fn add_institution(&mut self, institution: EducationalInstitution) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn start_research_project(&mut self, project: ResearchProject) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn update_research_progress(&mut self, project_id: u32, points: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn calculate_total_quality(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn active_research_projects(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ArmyType` is never used
[INFO] [stdout]  --> src/server/operations/military.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub enum ArmyType {
[INFO] [stdout]   |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ArmyStatus` is never used
[INFO] [stdout]   --> src/server/operations/military.rs:18:10
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub enum ArmyStatus {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CommanderTrait` is never used
[INFO] [stdout]   --> src/server/operations/military.rs:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub enum CommanderTrait {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ArmyUnit` is never constructed
[INFO] [stdout]   --> src/server/operations/military.rs:40:12
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct ArmyUnit {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BattleResult` is never used
[INFO] [stdout]   --> src/server/operations/military.rs:54:10
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub enum BattleResult {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Commander` is never constructed
[INFO] [stdout]   --> src/server/operations/military.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct Commander {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MilitarySystem` is never constructed
[INFO] [stdout]   --> src/server/operations/military.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct MilitarySystem {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/operations/military.rs:86:12
[INFO] [stdout]     |
[INFO] [stdout]  84 | impl MilitarySystem {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout]  85 |     /// 创建新的军事系统
[INFO] [stdout]  86 |     pub fn new(country_id: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn set_budget(&mut self, budget: f64) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn create_army(&mut self, army_type: ArmyType, size: u32, location_id: u32) -> Result<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub fn recruit_commander(&mut self, name: String, location_id: u32) -> Result<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     pub fn assign_commander(&mut self, commander_id: u32, army_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn move_army(&mut self, army_id: u32, destination_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn calculate_combat_power(&self, army_id: u32) -> Result<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub fn army_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn commander_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PoliticalAction` is never used
[INFO] [stdout]  --> src/server/operations/politics.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum PoliticalAction {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PolicyArea` is never used
[INFO] [stdout]   --> src/server/operations/politics.rs:19:10
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub enum PolicyArea {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PolicyStance` is never used
[INFO] [stdout]   --> src/server/operations/politics.rs:30:10
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub enum PolicyStance {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PoliticalFaction` is never constructed
[INFO] [stdout]   --> src/server/operations/politics.rs:39:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub struct PoliticalFaction {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ElectionResult` is never used
[INFO] [stdout]   --> src/server/operations/politics.rs:51:10
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub enum ElectionResult {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PoliticalEvent` is never constructed
[INFO] [stdout]   --> src/server/operations/politics.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct PoliticalEvent {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PoliticalSystem` is never constructed
[INFO] [stdout]   --> src/server/operations/politics.rs:71:12
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub struct PoliticalSystem {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/operations/politics.rs:85:12
[INFO] [stdout]     |
[INFO] [stdout]  83 | impl PoliticalSystem {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  84 |     /// 创建新的政治系统
[INFO] [stdout]  85 |     pub fn new(country_id: u32, government_type: GovernmentType) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub fn add_faction(&mut self, faction: PoliticalFaction) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn set_ruler(&mut self, ruler_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn record_event(&mut self, event: PoliticalEvent) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub fn calculate_stability(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn most_popular_faction(&self) -> Option<&PoliticalFaction> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn faction_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn event_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn update_public_opinion(&mut self, area: PolicyArea, value: f64) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SerializableGameState` is never constructed
[INFO] [stdout]   --> src/server/save_system.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct SerializableGameState {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SaveMetadata` is never constructed
[INFO] [stdout]   --> src/server/save_system.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct SaveMetadata {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SaveData` is never constructed
[INFO] [stdout]   --> src/server/save_system.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct SaveData {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `save_game`, `load_game_state`, `load_game`, `list_saves`, `delete_save`, and `save_exists` are never used
[INFO] [stdout]    --> src/server/save_system.rs:74:12
[INFO] [stdout]     |
[INFO] [stdout]  62 | impl SaveSystem {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  74 |     pub fn save_game(&self, game: &Game, save_name: &str, description: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn load_game_state(&self, save_name: &str) -> Result<SerializableGameState> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub fn load_game(&self, save_name: &str, config_manager: ConfigManager) -> Result<Game> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn list_saves(&self) -> Result<Vec<SaveMetadata>> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn delete_save(&self, save_name: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 187 |     pub fn save_exists(&self, save_name: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `assign_task`, `get_task_target_value`, `get_player_tasks`, `get_completed_tasks_count`, and `clone` are never used
[INFO] [stdout]    --> src/server/tasks.rs:164:12
[INFO] [stdout]     |
[INFO] [stdout] 140 | impl TaskManager {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn assign_task(&mut self, player_id: u32, task_id: &str, current_turn: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     fn get_task_target_value(task_type: &TaskType) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn get_player_tasks(&self, player_id: u32) -> Vec<&PlayerTaskProgress> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 461 |     pub fn get_completed_tasks_count(&self, player_id: u32) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 469 |     pub fn clone(&self) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]    --> src/server/tasks.rs:482:5
[INFO] [stdout]     |
[INFO] [stdout] 480 | pub enum TaskEvent {
[INFO] [stdout]     |          --------- variants in this enum
[INFO] [stdout] 481 |     RaiseArmy { size: u32 },
[INFO] [stdout] 482 |     WinBattle,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] 483 |     ConquerProvince,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 484 |     BuildStructure { structure_type: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 485 |     CollectTax { amount: f64 },
[INFO] [stdout] 486 |     EstablishTrade,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 487 |     FormAlliance,
[INFO] [stdout] 488 |     SignTreaty,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 489 |     ImproveRelations,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 490 |     ResearchTech,
[INFO] [stdout] 491 |     UnlockUnit,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 492 |     UnlockBuilding,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 493 |     ConquerCountry,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 494 |     IncreaseProvinces { count: u32 },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `TaskEvent` 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: enum `TechnologyEra` is never used
[INFO] [stdout]   --> src/server/technology/mod.rs:16:10
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub enum TechnologyEra {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TechnologyCategory` is never used
[INFO] [stdout]   --> src/server/technology/mod.rs:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub enum TechnologyCategory {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TechnologyStatus` is never used
[INFO] [stdout]   --> src/server/technology/mod.rs:47:10
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub enum TechnologyStatus {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TechnologyEffectType` is never used
[INFO] [stdout]   --> src/server/technology/mod.rs:57:10
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub enum TechnologyEffectType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TechnologyEffect` is never constructed
[INFO] [stdout]   --> src/server/technology/mod.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub struct TechnologyEffect {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Technology` is never constructed
[INFO] [stdout]   --> src/server/technology/mod.rs:86:12
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub struct Technology {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TechnologyTree` is never constructed
[INFO] [stdout]    --> src/server/technology/mod.rs:105:12
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub struct TechnologyTree {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResearchProgress` is never constructed
[INFO] [stdout]    --> src/server/technology/mod.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 114 | pub struct ResearchProgress {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/technology/mod.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | impl TechnologyTree {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 125 |     /// 创建新的科技树
[INFO] [stdout] 126 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn add_technology(&mut self, tech: Technology) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub fn get_technology(&self, tech_id: &str) -> Option<&Technology> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fn get_all_technologies(&self) -> Vec<&Technology> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 159 |     pub fn is_researched(&self, tech_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn is_researching(&self, tech_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub fn start_research(&mut self, tech_id: &str, _research_points: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub fn update_research(&mut self, tech_id: &str, points: f32) -> Result<f32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 249 |     fn complete_research(&mut self, tech_id: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn get_available_technologies(&self) -> Vec<&Technology> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 281 |     pub fn get_researching_technologies(&self) -> Vec<&ResearchProgress> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     pub fn get_researched_technologies(&self) -> Vec<&Technology> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn get_technology_effects(&self, tech_id: &str) -> Option<&Vec<TechnologyEffect>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 299 |     pub fn calculate_bonus(&self, effect_type: TechnologyEffectType, target: &str) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn get_era_progress(&self, era: TechnologyEra) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 321 |     pub fn get_current_era(&self) -> TechnologyEra {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TechnologyEffectApplier` is never constructed
[INFO] [stdout]   --> src/server/technology/effects.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct TechnologyEffectApplier;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/server/technology/effects.rs:15:12
[INFO] [stdout]     |
[INFO] [stdout]  13 | impl TechnologyEffectApplier {
[INFO] [stdout]     | ---------------------------- associated functions in this implementation
[INFO] [stdout]  14 |     /// 应用科技效果到国家
[INFO] [stdout]  15 |     pub fn apply_to_country(country: &mut Country, tech: &Technology) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  70 |     fn apply_military_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     fn apply_economic_bonus(country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     fn apply_industrial_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     fn apply_social_bonus(country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     fn apply_political_bonus(country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     fn apply_diplomatic_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 323 |     fn apply_administrative_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 358 |     fn apply_transportation_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 378 |     fn apply_communication_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 404 |     fn apply_energy_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 433 |     fn apply_unlock_unit(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     fn apply_unlock_building(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     fn apply_unlock_policy(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 463 |     fn apply_unlock_decision(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 473 |     fn apply_unlock_reform(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 483 |     pub fn calculate_total_effect_value(tech: &Technology) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 488 |     pub fn get_main_effect_type(tech: &Technology) -> Option<TechnologyEffectType> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 508 |     pub fn get_effect_description(tech: &Technology) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 522 |     pub fn has_bonus_for_target(tech: &Technology, target: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 527 |     pub fn get_bonus_for_target(tech: &Technology, target: &str) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResearchQueue` is never constructed
[INFO] [stdout]   --> src/server/technology/research.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ResearchQueue {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResearchManager` is never constructed
[INFO] [stdout]   --> src/server/technology/research.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct ResearchManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/technology/research.rs:30:12
[INFO] [stdout]     |
[INFO] [stdout]  28 | impl ResearchQueue {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  29 |     /// 创建新的研究队列
[INFO] [stdout]  30 |     pub fn new(max_size: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  39 |     pub fn add_technology(&mut self, tech_id: String) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub fn remove_technology(&mut self, tech_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub fn next_technology(&mut self) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn set_current_research(&mut self, tech_id: Option<String>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  81 |     pub fn current_research(&self) -> Option<&String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  86 |     pub fn get_queue(&self) -> Vec<&String> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn size(&self) -> usize {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn is_full(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn reorder(&mut self, new_order: Vec<String>) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/technology/research.rs:136:12
[INFO] [stdout]     |
[INFO] [stdout] 134 | impl ResearchManager {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 135 |     /// 创建新的研究管理器
[INFO] [stdout] 136 |     pub fn new(technology_tree: TechnologyTree) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn start_research(&mut self, tech_id: &str, country: &mut Country) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn update_research(&mut self, country: &mut Country, month: u32) -> Result<Vec<String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 247 |     fn calculate_monthly_research(&self, country: &Country) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 267 |     fn generate_research_points(&self, country: &mut Country, month: u32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 295 |     pub fn add_to_queue(&mut self, tech_id: String) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn remove_from_queue(&mut self, tech_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 305 |     pub fn get_research_queue(&self) -> Vec<&String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 310 |     pub fn get_current_research(&self) -> Option<&String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 315 |     pub fn get_research_progress(&self, tech_id: &str) -> Option<f32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     pub fn get_available_technologies(&self) -> Vec<&Technology> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 337 |     pub fn get_researched_technologies(&self) -> Vec<&Technology> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 342 |     pub fn get_researching_technologies(&self) -> Vec<&ResearchProgress> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 347 |     pub fn set_research_speed(&mut self, speed: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 352 |     pub fn set_research_efficiency(&mut self, efficiency: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     pub fn set_research_focus(&mut self, category: TechnologyCategory, focus: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 363 |     pub fn get_research_focus(&self, category: TechnologyCategory) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 368 |     pub fn technology_tree(&self) -> &TechnologyTree {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 373 |     pub fn technology_tree_mut(&mut self) -> &mut TechnologyTree {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 378 |     pub fn has_technology(&self, tech_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 383 |     pub fn get_technology_bonus(&self, effect_type: TechnologyEffectType, target: &str) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     pub fn get_era_progress(&self, era: TechnologyEra) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 393 |     pub fn get_current_era(&self) -> TechnologyEra {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PredefinedTechTree` is never constructed
[INFO] [stdout]  --> src/server/technology/tree.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct PredefinedTechTree;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/server/technology/tree.rs:13:12
[INFO] [stdout]     |
[INFO] [stdout]  11 | impl PredefinedTechTree {
[INFO] [stdout]     | ----------------------- associated functions in this implementation
[INFO] [stdout]  12 |     /// 创建包含所有预定义科技的科技树
[INFO] [stdout]  13 |     pub fn create() -> Result<TechnologyTree> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  44 |     fn add_military_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     fn add_economic_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     fn add_industrial_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 435 |     fn add_social_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 500 |     fn add_political_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 535 |     fn add_transportation_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 576 |     fn add_communication_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 617 |     fn add_energy_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start` is never used
[INFO] [stdout]    --> src/client/repl.rs:213:8
[INFO] [stdout]     |
[INFO] [stdout] 213 | pub fn start() -> Result<()> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NetworkConfig` is never constructed
[INFO] [stdout]    --> src/network/mod.rs:131:12
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub struct NetworkConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `receive_message` and `disconnect` are never used
[INFO] [stdout]    --> src/network/mod.rs:154:8
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub trait NetworkManager {
[INFO] [stdout]     |           -------------- methods in this trait
[INFO] [stdout] 153 |     fn send_message(&mut self, message: NetworkMessage) -> Result<()>;
[INFO] [stdout] 154 |     fn receive_message(&mut self) -> Result<Option<NetworkMessage>>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 155 |     fn is_connected(&self) -> bool;
[INFO] [stdout] 156 |     fn disconnect(&mut self) -> Result<()>;
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `serialize_message` is never used
[INFO] [stdout]    --> src/network/mod.rs:160:8
[INFO] [stdout]     |
[INFO] [stdout] 160 | pub fn serialize_message(message: &NetworkMessage) -> Result<Vec<u8>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `deserialize_message` is never used
[INFO] [stdout]    --> src/network/mod.rs:166:8
[INFO] [stdout]     |
[INFO] [stdout] 166 | pub fn deserialize_message(data: &[u8]) -> Result<NetworkMessage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NetworkClient` is never constructed
[INFO] [stdout]   --> src/network/client.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct NetworkClient {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `connect`, `start_receive_thread`, `get_messages`, `set_player_id`, and `player_id` are never used
[INFO] [stdout]    --> src/network/client.rs:20:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl NetworkClient {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  19 |     /// 创建新的网络客户端
[INFO] [stdout]  20 |     pub fn new(address: &str) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  31 |     pub fn connect(&mut self, username: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     fn start_receive_thread(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub fn get_messages(&mut self) -> Vec<NetworkMessage> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn set_player_id(&mut self, player_id: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn player_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PROTOCOL_VERSION` is never used
[INFO] [stdout]  --> src/network/protocol.rs:5:11
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub const PROTOCOL_VERSION: u32 = 1;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MessageHeader` is never constructed
[INFO] [stdout]  --> src/network/protocol.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct MessageHeader {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MessageType` is never used
[INFO] [stdout]   --> src/network/protocol.rs:19:10
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub enum MessageType {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ControlMessage` is never used
[INFO] [stdout]   --> src/network/protocol.rs:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub enum ControlMessage {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DataMessage` is never constructed
[INFO] [stdout]   --> src/network/protocol.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct DataMessage {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DataType` is never used
[INFO] [stdout]   --> src/network/protocol.rs:46:10
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub enum DataType {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AckMessage` is never constructed
[INFO] [stdout]   --> src/network/protocol.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct AckMessage {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NackMessage` is never constructed
[INFO] [stdout]   --> src/network/protocol.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct NackMessage {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ErrorCode` is never used
[INFO] [stdout]   --> src/network/protocol.rs:70:10
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub enum ErrorCode {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HeartbeatMessage` is never constructed
[INFO] [stdout]   --> src/network/protocol.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct HeartbeatMessage {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProtocolHandler` is never constructed
[INFO] [stdout]   --> src/network/protocol.rs:91:12
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub struct ProtocolHandler {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/network/protocol.rs:98:12
[INFO] [stdout]     |
[INFO] [stdout]  96 | impl ProtocolHandler {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  97 |     /// 创建新的协议处理器
[INFO] [stdout]  98 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn create_header(&mut self, message_type: MessageType) -> MessageHeader {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn validate_header(&mut self, header: &MessageHeader) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn calculate_checksum(data: &[u8]) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 159 |     pub fn verify_checksum(data: &[u8], expected_checksum: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     fn current_timestamp() -> u64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn pack_message<T: Serialize>(message: &T) -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn unpack_message<T: for<'a> Deserialize<'a>>(data: &[u8]) -> Result<T> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     pub fn compress_data(data: &[u8]) -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     pub fn decompress_data(data: &[u8]) -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_MESSAGE_SIZE` is never used
[INFO] [stdout]    --> src/network/protocol.rs:201:15
[INFO] [stdout]     |
[INFO] [stdout] 201 |     pub const MAX_MESSAGE_SIZE: usize = 1024 * 1024; // 1MB
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_SEQUENCE_GAP` is never used
[INFO] [stdout]    --> src/network/protocol.rs:202:15
[INFO] [stdout]     |
[INFO] [stdout] 202 |     pub const MAX_SEQUENCE_GAP: u32 = 10;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HEARTBEAT_INTERVAL` is never used
[INFO] [stdout]    --> src/network/protocol.rs:203:15
[INFO] [stdout]     |
[INFO] [stdout] 203 |     pub const HEARTBEAT_INTERVAL: u64 = 30000; // 30秒
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CONNECTION_TIMEOUT` is never used
[INFO] [stdout]    --> src/network/protocol.rs:204:15
[INFO] [stdout]     |
[INFO] [stdout] 204 |     pub const CONNECTION_TIMEOUT: u64 = 120000; // 2分钟
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_control_message` is never used
[INFO] [stdout]    --> src/network/protocol.rs:212:12
[INFO] [stdout]     |
[INFO] [stdout] 212 |     pub fn create_control_message(control_type: ControlMessage) -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_control_message` is never used
[INFO] [stdout]    --> src/network/protocol.rs:228:12
[INFO] [stdout]     |
[INFO] [stdout] 228 |     pub fn parse_control_message(data: &[u8]) -> Result<(MessageHeader, ControlMessage)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_data_message` is never used
[INFO] [stdout]    --> src/network/protocol.rs:234:12
[INFO] [stdout]     |
[INFO] [stdout] 234 |     pub fn create_data_message(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_heartbeat_message` is never used
[INFO] [stdout]    --> src/network/protocol.rs:254:12
[INFO] [stdout]     |
[INFO] [stdout] 254 |     pub fn create_heartbeat_message() -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ClientConnection` is never constructed
[INFO] [stdout]   --> src/network/server.rs:11:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | struct ClientConnection {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NetworkServer` is never constructed
[INFO] [stdout]   --> src/network/server.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct NetworkServer {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/network/server.rs:32:12
[INFO] [stdout]     |
[INFO] [stdout]  30 | impl NetworkServer {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  31 |     /// 创建新的网络服务器
[INFO] [stdout]  32 |     pub fn new(address: &str, port: u16) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  45 |     pub fn start(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn stop(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     fn start_accept_thread(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     fn start_heartbeat_thread(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn get_messages(&mut self) -> Vec<(u32, NetworkMessage)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn send_to_client(&mut self, player_id: u32, message: NetworkMessage) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn broadcast(&mut self, message: NetworkMessage) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn client_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn is_running(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_client` is never used
[INFO] [stdout]    --> src/network/server.rs:256:4
[INFO] [stdout]     |
[INFO] [stdout] 256 | fn handle_client(
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LocalNetworkServer` is never constructed
[INFO] [stdout]    --> src/network/server.rs:351:12
[INFO] [stdout]     |
[INFO] [stdout] 351 | pub struct LocalNetworkServer {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/network/server.rs:359:12
[INFO] [stdout]     |
[INFO] [stdout] 357 | impl LocalNetworkServer {
[INFO] [stdout]     | ----------------------- associated items in this implementation
[INFO] [stdout] 358 |     /// 创建新的本地网络服务器
[INFO] [stdout] 359 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 368 |     pub fn start(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 378 |     pub fn stop(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 390 |     pub fn get_messages(&mut self) -> Vec<(u32, NetworkMessage)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 396 |     pub fn handle_connect(&mut self, username: &str) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 414 |     pub fn handle_message(&mut self, player_id: u32, message: NetworkMessage) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 471 |     pub fn send_to_client(&mut self, player_id: u32, message: NetworkMessage) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 483 |     pub fn client_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 488 |     pub fn is_running(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `stop` is never used
[INFO] [stdout]   --> src/server/mod.rs:54:8
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub fn stop() -> Result<()> {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `default` is never used
[INFO] [stdout]   --> src/server/config.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 69 | impl Config {
[INFO] [stdout]    | ----------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn default() -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `with_default` is never used
[INFO] [stdout]    --> src/server/config.rs:160:12
[INFO] [stdout]     |
[INFO] [stdout] 146 | impl ConfigManager {
[INFO] [stdout]     | ------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn with_default() -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_CONFIG` is never used
[INFO] [stdout]    --> src/server/config.rs:172:7
[INFO] [stdout]     |
[INFO] [stdout] 172 | const DEFAULT_CONFIG: &str = r#"
[INFO] [stdout]     |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `players` is never read
[INFO] [stdout]   --> src/server/game.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Game {
[INFO] [stdout]    |            ---- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub players: HashMap<u32, Player>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Game` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `stop`, `current_turn`, `is_running`, and `config_manager` are never used
[INFO] [stdout]    --> src/server/game.rs:406:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl Game {
[INFO] [stdout]     | --------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 406 |     pub fn stop(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 413 |     pub fn current_turn(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 418 |     pub fn is_running(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 451 |     pub fn config_manager(&self) -> &ConfigManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CityType` is never used
[INFO] [stdout]  --> src/server/models/city.rs:7:10
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum CityType {
[INFO] [stdout]   |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BuildingType` is never used
[INFO] [stdout]   --> src/server/models/city.rs:20:10
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub enum BuildingType {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BuildingLevel` is never used
[INFO] [stdout]   --> src/server/models/city.rs:39:10
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub enum BuildingLevel {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CityStatus` is never used
[INFO] [stdout]   --> src/server/models/city.rs:49:10
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub enum CityStatus {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `City` is never constructed
[INFO] [stdout]   --> src/server/models/city.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct City {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/models/city.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 112 | impl City {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout] 113 |     /// 创建新城�?
[INFO] [stdout] 114 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     pub fn id(&self) -> u32 {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn city_type(&self) -> CityType {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     pub fn set_city_type(&mut self, city_type: CityType) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn status(&self) -> CityStatus {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub fn set_status(&mut self, status: CityStatus) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 223 |     pub fn province_id(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     pub fn country_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn set_country_id(&mut self, country_id: Option<u32>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 238 |     pub fn location(&self) -> (f32, f32) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 243 |     pub fn population(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn update_population(&mut self, change: i32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn population_density(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn set_population_density(&mut self, density: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 276 |     pub fn growth_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 281 |     pub fn set_growth_rate(&mut self, rate: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     pub fn base_tax(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub fn calculate_actual_tax(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 299 |     pub fn production_value(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 304 |     pub fn trade_value(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     pub fn unemployment_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 314 |     pub fn set_unemployment_rate(&mut self, rate: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn buildings(&self) -> &HashMap<BuildingType, BuildingLevel> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub fn get_building_level(&self, building_type: BuildingType) -> BuildingLevel {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 338 |     pub fn build_or_upgrade(&mut self, building_type: BuildingType) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 386 |     pub fn demolish_building(&mut self, building_type: BuildingType) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 414 |     pub fn infrastructure_level(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 419 |     pub fn upgrade_infrastructure(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 431 |     pub fn housing_level(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 436 |     pub fn upgrade_housing(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn sanitation_level(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn upgrade_sanitation(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 465 |     pub fn literacy_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 470 |     pub fn set_literacy_rate(&mut self, rate: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 481 |     pub fn education_quality(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 486 |     pub fn improve_education(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 500 |     pub fn crime_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 505 |     pub fn reduce_crime(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 518 |     pub fn stability(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 523 |     pub fn set_stability(&mut self, stability: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 534 |     pub fn public_order(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 539 |     pub fn improve_public_order(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     pub fn is_coastal(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 556 |     pub fn has_port(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 561 |     pub fn build_port(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 579 |     pub fn is_capital(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 584 |     pub fn set_capital(&mut self, is_capital: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 595 |     pub fn is_trade_center(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 600 |     pub fn set_trade_center(&mut self, is_trade_center: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 609 |     pub fn development_index(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 614 |     pub fn recalculate_development_index(&mut self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 636 |     pub fn monthly_update(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 724 |     fn update_city_status(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 741 |     fn calculate_city_score(&self) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 771 |     pub fn get_summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CityBuilder` is never constructed
[INFO] [stdout]    --> src/server/models/city.rs:807:12
[INFO] [stdout]     |
[INFO] [stdout] 807 | pub struct CityBuilder {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/models/city.rs:822:12
[INFO] [stdout]     |
[INFO] [stdout] 820 | impl CityBuilder {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 821 |     /// 创建新的城市构建�?
[INFO] [stdout] 822 |     pub fn new(id: u32, name: String, province_id: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 838 |     pub fn location(mut self, latitude: f32, longitude: f32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 845 |     pub fn population(mut self, population: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 851 |     pub fn coastal(mut self, is_coastal: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 857 |     pub fn capital(mut self, is_capital: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 863 |     pub fn trade_center(mut self, is_trade_center: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 869 |     pub fn add_building(mut self, building_type: BuildingType) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 875 |     pub fn build(self) -> Result<City> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/server/models/country.rs:57:12
[INFO] [stdout]     |
[INFO] [stdout]  55 | impl CountryStatus {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout]  56 |     /// 获取稳定度
[INFO] [stdout]  57 |     pub fn stability(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn stability_mut(&mut self) -> &mut f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn war_exhaustion(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     pub fn war_exhaustion_mut(&mut self) -> &mut f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn inflation(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn inflation_mut(&mut self) -> &mut f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn corruption(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub fn corruption_mut(&mut self) -> &mut f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn prestige(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn prestige_mut(&mut self) -> &mut f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn legitimacy(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn legitimacy_mut(&mut self) -> &mut f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/server/models/country.rs:267:12
[INFO] [stdout]     |
[INFO] [stdout] 197 | impl Country {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 267 |     pub fn id(&self) -> u32 {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn government_type(&self) -> GovernmentType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     pub fn ideology(&self) -> Ideology {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub fn stability(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn set_stability(&mut self, stability: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 341 |     pub fn tax_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 346 |     pub fn set_tax_rate(&mut self, rate: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 420 |     pub fn manpower(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 425 |     pub fn max_manpower(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 430 |     pub fn owned_provinces(&self) -> &HashSet<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 444 |     pub fn remove_province(&mut self, province_id: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 451 |     pub fn is_core_province(&self, province_id: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 456 |     pub fn education_level(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 461 |     pub fn set_education_level(&mut self, level: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 472 |     pub fn literacy_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 477 |     pub fn set_literacy_rate(&mut self, rate: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 493 |     pub fn get_diplomatic_relation(&self, target_country_id: u32) -> Option<&DiplomaticRelation> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 498 |     pub fn set_diplomatic_relation(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 508 |     pub fn declare_war(&mut self, target_country_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 527 |     pub fn propose_peace(&mut self, target_country_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 538 |     pub fn sign_trade_agreement(&mut self, target_country_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 649 |     pub fn research_technology(&mut self, technology_id: String, cost: f32) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 669 |     pub fn has_technology(&self, technology_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 674 |     pub fn get_power_score(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 696 |     pub fn get_summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 726 |     pub fn status_mut(&mut self) -> &mut CountryStatus {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 731 |     pub fn economy_mut(&mut self) -> &mut Economy {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 736 |     pub fn diplomatic_relations_mut(&mut self) -> &mut HashMap<u32, DiplomaticRelation> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 741 |     pub fn technologies(&self) -> &HashSet<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 751 |     pub fn set_research_points(&mut self, points: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 761 |     pub fn set_government_type(&mut self, government_type: GovernmentType) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 766 |     pub fn set_ideology(&mut self, ideology: Ideology) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 771 |     pub fn legitimacy(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 776 |     pub fn set_legitimacy(&mut self, legitimacy: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 787 |     pub fn prestige(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 792 |     pub fn set_prestige(&mut self, prestige: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 803 |     pub fn corruption(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 808 |     pub fn set_corruption(&mut self, corruption: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CountryBuilder` is never constructed
[INFO] [stdout]    --> src/server/models/country.rs:821:12
[INFO] [stdout]     |
[INFO] [stdout] 821 | pub struct CountryBuilder {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/models/country.rs:835:12
[INFO] [stdout]     |
[INFO] [stdout] 833 | impl CountryBuilder {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 834 |     /// 创建新的国家构建�?
[INFO] [stdout] 835 |     pub fn new(id: u32, name: String, tag: String) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 850 |     pub fn government_type(mut self, government_type: GovernmentType) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 856 |     pub fn ideology(mut self, ideology: Ideology) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 862 |     pub fn starting_treasury(mut self, treasury: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 868 |     pub fn starting_gdp(mut self, gdp: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 874 |     pub fn starting_army(mut self, army_size: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 880 |     pub fn add_core_province(mut self, province_id: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 886 |     pub fn build(self) -> Result<Country> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/models/player.rs:146:12
[INFO] [stdout]     |
[INFO] [stdout] 144 | impl Player {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] 145 |     /// 创建新玩�?
[INFO] [stdout] 146 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn id(&self) -> u32 {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 235 |     pub fn username(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn display_name(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 245 |     pub fn player_type(&self) -> PlayerType {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn status(&self) -> PlayerStatus {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |     pub fn set_status(&mut self, status: PlayerStatus) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |     pub fn permission_level(&self) -> PermissionLevel {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn set_permission_level(&mut self, level: PermissionLevel) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 273 |     pub fn country_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn set_country(&mut self, country_id: Option<u32>) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn add_controlled_country(&mut self, country_id: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn remove_controlled_country(&mut self, country_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     pub fn controlled_countries(&self) -> &HashSet<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 314 |     pub fn controls_country(&self, country_id: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 319 |     pub fn current_turn(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 324 |     pub fn set_current_turn(&mut self, turn: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 329 |     pub fn turn_completed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 334 |     pub fn set_turn_completed(&mut self, completed: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 344 |     pub fn action_points(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 349 |     pub fn consume_action_points(&mut self, points: u32) -> Result<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 361 |     pub fn restore_action_points(&mut self, points: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 366 |     pub fn reset_action_points(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 373 |     pub fn score(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 378 |     pub fn update_score(&mut self, delta: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 386 |     pub fn join_time(&self) -> DateTime<Utc> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 391 |     pub fn last_active(&self) -> DateTime<Utc> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 396 |     pub fn update_last_active(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 401 |     pub fn action_history(&self) -> &Vec<PlayerAction> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 406 |     pub fn recent_actions(&self, limit: usize) -> Vec<&PlayerAction> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 417 |     pub fn record_action(
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     pub fn stats(&self) -> &PlayerStats {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn update_stats<F>(&mut self, updater: F)
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 456 |     pub fn preferences(&self) -> &PlayerPreferences {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 461 |     pub fn preferences_mut(&mut self) -> &mut PlayerPreferences {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 466 |     pub fn update_preferences<F>(&mut self, updater: F)
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 474 |     pub fn ai_settings(&self) -> Option<&AISettings> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 479 |     pub fn ai_settings_mut(&mut self) -> Option<&mut AISettings> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 484 |     pub fn update_ai_settings<F>(&mut self, updater: F) -> Result<()>
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 499 |     pub fn ip_address(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 504 |     pub fn set_ip_address(&mut self, ip_address: Option<String>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 509 |     pub fn session_id(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 514 |     pub fn set_session_id(&mut self, session_id: Option<String>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 519 |     pub fn commands_this_turn(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 524 |     pub fn pending_actions(&self) -> &Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 529 |     pub fn add_pending_action(&mut self, action: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 534 |     pub fn clear_pending_actions(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 539 |     pub fn is_online(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 544 |     pub fn is_ai(&self) -> bool {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 549 |     pub fn is_human(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 554 |     pub fn is_admin(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 562 |     pub fn can_take_action(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 567 |     pub fn calculate_activity_score(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 589 |     pub fn get_summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 635 |     pub fn execute_ai_turn(&mut self) -> Result<Vec<String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 722 |     pub fn serialize(&self) -> Result<String> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 728 |     pub fn deserialize(data: &str) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PlayerBuilder` is never constructed
[INFO] [stdout]    --> src/server/models/player.rs:736:12
[INFO] [stdout]     |
[INFO] [stdout] 736 | pub struct PlayerBuilder {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/models/player.rs:750:12
[INFO] [stdout]     |
[INFO] [stdout] 748 | impl PlayerBuilder {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 749 |     /// 创建新的玩家构建�?
[INFO] [stdout] 750 |     pub fn new(id: u32, username: String) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 765 |     pub fn display_name(mut self, display_name: String) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 771 |     pub fn player_type(mut self, player_type: PlayerType) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 777 |     pub fn permission_level(mut self, permission_level: PermissionLevel) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 783 |     pub fn country_id(mut self, country_id: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 789 |     pub fn ai_settings(mut self, ai_settings: AISettings) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 795 |     pub fn ip_address(mut self, ip_address: String) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 801 |     pub fn session_id(mut self, session_id: String) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 807 |     pub fn build(self) -> Result<Player> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/server/models/province.rs:138:12
[INFO] [stdout]     |
[INFO] [stdout]  85 | impl Province {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn id(&self) -> u32 {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn owner_country_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub fn set_owner(&mut self, country_id: Option<u32>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn province_type(&self) -> ProvinceType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn set_province_type(&mut self, province_type: ProvinceType) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn status(&self) -> ProvinceStatus {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn set_status(&mut self, status: ProvinceStatus) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn population(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub fn literacy_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub fn set_literacy_rate(&mut self, rate: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn education_level(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn set_education_level(&mut self, level: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn loyalty(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub fn set_loyalty(&mut self, loyalty: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 243 |     pub fn base_tax(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn calculate_actual_tax(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 254 |     pub fn resources(&self) -> &HashMap<ResourceType, u32> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn get_resource(&self, resource_type: ResourceType) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 269 |     pub fn consume_resource(&mut self, resource_type: ResourceType, amount: u32) -> Result<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub fn resource_production(&self) -> &HashMap<ResourceType, u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn get_resource_production(&self, resource_type: ResourceType) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 295 |     pub fn set_resource_production(&mut self, resource_type: ResourceType, amount: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn garrison_size(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 305 |     pub fn set_garrison_size(&mut self, size: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 310 |     pub fn fort_level(&self) -> u8 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 315 |     pub fn upgrade_fort(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 327 |     pub fn autonomy(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     pub fn set_autonomy(&mut self, autonomy: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 343 |     pub fn corruption(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 348 |     pub fn set_corruption(&mut self, corruption: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 359 |     pub fn infrastructure(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     pub fn set_infrastructure(&mut self, infrastructure: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 375 |     pub fn development_level(&self) -> u8 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     pub fn increase_development(&mut self, amount: u8) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 394 |     pub fn is_coastal(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 399 |     pub fn has_port(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 404 |     pub fn build_port(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 415 |     pub fn destroy_port(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 471 |     pub fn get_summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProvinceBuilder` is never constructed
[INFO] [stdout]    --> src/server/models/province.rs:498:12
[INFO] [stdout]     |
[INFO] [stdout] 498 | pub struct ProvinceBuilder {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/models/province.rs:512:12
[INFO] [stdout]     |
[INFO] [stdout] 510 | impl ProvinceBuilder {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 511 |     /// 创建新的省份构建�?
[INFO] [stdout] 512 |     pub fn new(id: u32, name: String) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 527 |     pub fn population(mut self, population: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 533 |     pub fn development_level(mut self, development_level: u8) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 539 |     pub fn terrain(mut self, terrain: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 545 |     pub fn climate(mut self, climate: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     pub fn coastal(mut self, coastal: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 557 |     pub fn add_resource(mut self, resource_type: ResourceType, amount: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 563 |     pub fn add_resource_production(mut self, resource_type: ResourceType, amount: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 569 |     pub fn build(self) -> Result<Province> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_defense_bonus` and `get_strategic_value` are never used
[INFO] [stdout]    --> src/server/models/province.rs:597:12
[INFO] [stdout]     |
[INFO] [stdout] 595 | impl Province {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout] 596 |     /// 获取省份战斗力加成（基于堡垒、地形等�?
[INFO] [stdout] 597 |     pub fn get_defense_bonus(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 624 |     pub fn get_strategic_value(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DiplomaticProposal` is never used
[INFO] [stdout]   --> src/server/operations/diplomacy.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum DiplomaticProposal {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Proposal` is never constructed
[INFO] [stdout]   --> src/server/operations/diplomacy.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct Proposal {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ProposalStatus` is never used
[INFO] [stdout]   --> src/server/operations/diplomacy.rs:36:10
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub enum ProposalStatus {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `War` is never constructed
[INFO] [stdout]   --> src/server/operations/diplomacy.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub struct War {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `WarStatus` is never used
[INFO] [stdout]   --> src/server/operations/diplomacy.rs:60:10
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub enum WarStatus {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DiplomacyManager` is never constructed
[INFO] [stdout]   --> src/server/operations/diplomacy.rs:69:12
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub struct DiplomacyManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/operations/diplomacy.rs:78:12
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl DiplomacyManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout]  77 |     /// 创建新的外交管理�?
[INFO] [stdout]  78 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub fn send_proposal(
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn accept_proposal(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     pub fn reject_proposal(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub fn declare_war(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 321 |     pub fn propose_peace(
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     fn sign_peace_treaty(&mut self, country1: &mut Country, country2: &mut Country) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 407 |     pub fn form_alliance(&mut self, country1: &mut Country, country2: &mut Country) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 456 |     pub fn sign_non_aggression_pact(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 494 |     pub fn sign_trade_agreement(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 549 |     pub fn grant_military_access(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 584 |     pub fn improve_relations(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 602 |     pub fn worsen_relations(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 620 |     fn update_relation_value(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 660 |     pub fn calculate_compatibility(country1: &Country, country2: &Country) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 700 |     pub fn proposals(&self) -> &HashMap<u32, Proposal> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 705 |     pub fn wars(&self) -> &HashMap<u32, War> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 710 |     pub fn get_wars_by_country(&self, country_id: u32) -> Vec<&War> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 721 |     pub fn update_war_score(&mut self, war_id: u32, delta: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 732 |     pub fn end_war(&mut self, war_id: u32, victor_country_id: Option<u32>) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 766 |     pub fn monthly_update(&mut self, countries: &mut HashMap<u32, Country>) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_secular` is never used
[INFO] [stdout]    --> src/server/operations/diplomacy.rs:921:12
[INFO] [stdout]     |
[INFO] [stdout] 920 | impl Ideology {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] 921 |     pub fn is_secular(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_secular` is never used
[INFO] [stdout]    --> src/server/operations/diplomacy.rs:931:12
[INFO] [stdout]     |
[INFO] [stdout] 930 | impl GovernmentType {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] 931 |     pub fn is_secular(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_country_secular` is never used
[INFO] [stdout]    --> src/server/operations/diplomacy.rs:937:8
[INFO] [stdout]     |
[INFO] [stdout] 937 | pub fn is_country_secular(country: &Country) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EducationPolicy` is never used
[INFO] [stdout]  --> src/server/operations/education.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub enum EducationPolicy {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ResearchField` is never used
[INFO] [stdout]   --> src/server/operations/education.rs:17:10
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum ResearchField {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ResearchStatus` is never used
[INFO] [stdout]   --> src/server/operations/education.rs:28:10
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum ResearchStatus {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResearchProject` is never constructed
[INFO] [stdout]   --> src/server/operations/education.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub struct ResearchProject {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `InstitutionType` is never used
[INFO] [stdout]   --> src/server/operations/education.rs:52:10
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub enum InstitutionType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EducationalInstitution` is never constructed
[INFO] [stdout]   --> src/server/operations/education.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub struct EducationalInstitution {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EducationSystem` is never constructed
[INFO] [stdout]   --> src/server/operations/education.rs:76:12
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub struct EducationSystem {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/operations/education.rs:88:12
[INFO] [stdout]     |
[INFO] [stdout]  86 | impl EducationSystem {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  87 |     /// 创建新的教育系统
[INFO] [stdout]  88 |     pub fn new(country_id: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn set_budget(&mut self, budget: f64) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn set_education_policy(&mut self, policy: EducationPolicy) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub fn add_institution(&mut self, institution: EducationalInstitution) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn start_research_project(&mut self, project: ResearchProject) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn update_research_progress(&mut self, project_id: u32, points: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn calculate_total_quality(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn active_research_projects(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ArmyType` is never used
[INFO] [stdout]  --> src/server/operations/military.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub enum ArmyType {
[INFO] [stdout]   |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ArmyStatus` is never used
[INFO] [stdout]   --> src/server/operations/military.rs:18:10
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub enum ArmyStatus {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CommanderTrait` is never used
[INFO] [stdout]   --> src/server/operations/military.rs:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub enum CommanderTrait {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ArmyUnit` is never constructed
[INFO] [stdout]   --> src/server/operations/military.rs:40:12
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct ArmyUnit {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BattleResult` is never used
[INFO] [stdout]   --> src/server/operations/military.rs:54:10
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub enum BattleResult {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Commander` is never constructed
[INFO] [stdout]   --> src/server/operations/military.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct Commander {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MilitarySystem` is never constructed
[INFO] [stdout]   --> src/server/operations/military.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct MilitarySystem {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/operations/military.rs:86:12
[INFO] [stdout]     |
[INFO] [stdout]  84 | impl MilitarySystem {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout]  85 |     /// 创建新的军事系统
[INFO] [stdout]  86 |     pub fn new(country_id: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn set_budget(&mut self, budget: f64) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn create_army(&mut self, army_type: ArmyType, size: u32, location_id: u32) -> Result<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub fn recruit_commander(&mut self, name: String, location_id: u32) -> Result<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     pub fn assign_commander(&mut self, commander_id: u32, army_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn move_army(&mut self, army_id: u32, destination_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn calculate_combat_power(&self, army_id: u32) -> Result<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub fn army_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn commander_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PoliticalAction` is never used
[INFO] [stdout]  --> src/server/operations/politics.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum PoliticalAction {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PolicyArea` is never used
[INFO] [stdout]   --> src/server/operations/politics.rs:19:10
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub enum PolicyArea {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PolicyStance` is never used
[INFO] [stdout]   --> src/server/operations/politics.rs:30:10
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub enum PolicyStance {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PoliticalFaction` is never constructed
[INFO] [stdout]   --> src/server/operations/politics.rs:39:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub struct PoliticalFaction {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ElectionResult` is never used
[INFO] [stdout]   --> src/server/operations/politics.rs:51:10
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub enum ElectionResult {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PoliticalEvent` is never constructed
[INFO] [stdout]   --> src/server/operations/politics.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct PoliticalEvent {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PoliticalSystem` is never constructed
[INFO] [stdout]   --> src/server/operations/politics.rs:71:12
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub struct PoliticalSystem {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/operations/politics.rs:85:12
[INFO] [stdout]     |
[INFO] [stdout]  83 | impl PoliticalSystem {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  84 |     /// 创建新的政治系统
[INFO] [stdout]  85 |     pub fn new(country_id: u32, government_type: GovernmentType) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub fn add_faction(&mut self, faction: PoliticalFaction) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn set_ruler(&mut self, ruler_id: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn record_event(&mut self, event: PoliticalEvent) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub fn calculate_stability(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn most_popular_faction(&self) -> Option<&PoliticalFaction> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn faction_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn event_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn update_public_opinion(&mut self, area: PolicyArea, value: f64) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SerializableGameState` is never constructed
[INFO] [stdout]   --> src/server/save_system.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct SerializableGameState {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SaveMetadata` is never constructed
[INFO] [stdout]   --> src/server/save_system.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct SaveMetadata {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SaveData` is never constructed
[INFO] [stdout]   --> src/server/save_system.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct SaveData {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SaveSystem` is never constructed
[INFO] [stdout]   --> src/server/save_system.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct SaveSystem {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/save_system.rs:64:12
[INFO] [stdout]     |
[INFO] [stdout]  62 | impl SaveSystem {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  63 |     /// 创建新的存档系统
[INFO] [stdout]  64 |     pub fn new(save_directory: &str) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  74 |     pub fn save_game(&self, game: &Game, save_name: &str, description: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn load_game_state(&self, save_name: &str) -> Result<SerializableGameState> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub fn load_game(&self, save_name: &str, config_manager: ConfigManager) -> Result<Game> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn list_saves(&self) -> Result<Vec<SaveMetadata>> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn delete_save(&self, save_name: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 187 |     pub fn save_exists(&self, save_name: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `assign_task`, `get_task_target_value`, `get_player_tasks`, `get_completed_tasks_count`, and `clone` are never used
[INFO] [stdout]    --> src/server/tasks.rs:164:12
[INFO] [stdout]     |
[INFO] [stdout] 140 | impl TaskManager {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn assign_task(&mut self, player_id: u32, task_id: &str, current_turn: u32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     fn get_task_target_value(task_type: &TaskType) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn get_player_tasks(&self, player_id: u32) -> Vec<&PlayerTaskProgress> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 461 |     pub fn get_completed_tasks_count(&self, player_id: u32) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 469 |     pub fn clone(&self) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]    --> src/server/tasks.rs:482:5
[INFO] [stdout]     |
[INFO] [stdout] 480 | pub enum TaskEvent {
[INFO] [stdout]     |          --------- variants in this enum
[INFO] [stdout] 481 |     RaiseArmy { size: u32 },
[INFO] [stdout] 482 |     WinBattle,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] 483 |     ConquerProvince,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 484 |     BuildStructure { structure_type: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 485 |     CollectTax { amount: f64 },
[INFO] [stdout] 486 |     EstablishTrade,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 487 |     FormAlliance,
[INFO] [stdout] 488 |     SignTreaty,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 489 |     ImproveRelations,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 490 |     ResearchTech,
[INFO] [stdout] 491 |     UnlockUnit,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 492 |     UnlockBuilding,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 493 |     ConquerCountry,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 494 |     IncreaseProvinces { count: u32 },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `TaskEvent` 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: enum `TechnologyEra` is never used
[INFO] [stdout]   --> src/server/technology/mod.rs:16:10
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub enum TechnologyEra {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TechnologyCategory` is never used
[INFO] [stdout]   --> src/server/technology/mod.rs:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub enum TechnologyCategory {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TechnologyStatus` is never used
[INFO] [stdout]   --> src/server/technology/mod.rs:47:10
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub enum TechnologyStatus {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TechnologyEffectType` is never used
[INFO] [stdout]   --> src/server/technology/mod.rs:57:10
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub enum TechnologyEffectType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TechnologyEffect` is never constructed
[INFO] [stdout]   --> src/server/technology/mod.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub struct TechnologyEffect {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Technology` is never constructed
[INFO] [stdout]   --> src/server/technology/mod.rs:86:12
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub struct Technology {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TechnologyTree` is never constructed
[INFO] [stdout]    --> src/server/technology/mod.rs:105:12
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub struct TechnologyTree {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResearchProgress` is never constructed
[INFO] [stdout]    --> src/server/technology/mod.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 114 | pub struct ResearchProgress {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/technology/mod.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | impl TechnologyTree {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 125 |     /// 创建新的科技树
[INFO] [stdout] 126 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn add_technology(&mut self, tech: Technology) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub fn get_technology(&self, tech_id: &str) -> Option<&Technology> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fn get_all_technologies(&self) -> Vec<&Technology> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 159 |     pub fn is_researched(&self, tech_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn is_researching(&self, tech_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub fn start_research(&mut self, tech_id: &str, _research_points: f32) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub fn update_research(&mut self, tech_id: &str, points: f32) -> Result<f32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 249 |     fn complete_research(&mut self, tech_id: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn get_available_technologies(&self) -> Vec<&Technology> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 281 |     pub fn get_researching_technologies(&self) -> Vec<&ResearchProgress> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     pub fn get_researched_technologies(&self) -> Vec<&Technology> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn get_technology_effects(&self, tech_id: &str) -> Option<&Vec<TechnologyEffect>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 299 |     pub fn calculate_bonus(&self, effect_type: TechnologyEffectType, target: &str) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn get_era_progress(&self, era: TechnologyEra) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 321 |     pub fn get_current_era(&self) -> TechnologyEra {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TechnologyEffectApplier` is never constructed
[INFO] [stdout]   --> src/server/technology/effects.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct TechnologyEffectApplier;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/server/technology/effects.rs:15:12
[INFO] [stdout]     |
[INFO] [stdout]  13 | impl TechnologyEffectApplier {
[INFO] [stdout]     | ---------------------------- associated functions in this implementation
[INFO] [stdout]  14 |     /// 应用科技效果到国家
[INFO] [stdout]  15 |     pub fn apply_to_country(country: &mut Country, tech: &Technology) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  70 |     fn apply_military_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     fn apply_economic_bonus(country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     fn apply_industrial_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     fn apply_social_bonus(country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     fn apply_political_bonus(country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     fn apply_diplomatic_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 323 |     fn apply_administrative_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 358 |     fn apply_transportation_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 378 |     fn apply_communication_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 404 |     fn apply_energy_bonus(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 433 |     fn apply_unlock_unit(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     fn apply_unlock_building(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     fn apply_unlock_policy(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 463 |     fn apply_unlock_decision(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 473 |     fn apply_unlock_reform(_country: &mut Country, effect: &TechnologyEffect) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 483 |     pub fn calculate_total_effect_value(tech: &Technology) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 488 |     pub fn get_main_effect_type(tech: &Technology) -> Option<TechnologyEffectType> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 508 |     pub fn get_effect_description(tech: &Technology) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 522 |     pub fn has_bonus_for_target(tech: &Technology, target: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 527 |     pub fn get_bonus_for_target(tech: &Technology, target: &str) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResearchQueue` is never constructed
[INFO] [stdout]   --> src/server/technology/research.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ResearchQueue {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResearchManager` is never constructed
[INFO] [stdout]   --> src/server/technology/research.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct ResearchManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/technology/research.rs:30:12
[INFO] [stdout]     |
[INFO] [stdout]  28 | impl ResearchQueue {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  29 |     /// 创建新的研究队列
[INFO] [stdout]  30 |     pub fn new(max_size: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  39 |     pub fn add_technology(&mut self, tech_id: String) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub fn remove_technology(&mut self, tech_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub fn next_technology(&mut self) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn set_current_research(&mut self, tech_id: Option<String>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  81 |     pub fn current_research(&self) -> Option<&String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  86 |     pub fn get_queue(&self) -> Vec<&String> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn size(&self) -> usize {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn is_full(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn reorder(&mut self, new_order: Vec<String>) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/technology/research.rs:136:12
[INFO] [stdout]     |
[INFO] [stdout] 134 | impl ResearchManager {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 135 |     /// 创建新的研究管理器
[INFO] [stdout] 136 |     pub fn new(technology_tree: TechnologyTree) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn start_research(&mut self, tech_id: &str, country: &mut Country) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn update_research(&mut self, country: &mut Country, month: u32) -> Result<Vec<String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 247 |     fn calculate_monthly_research(&self, country: &Country) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 267 |     fn generate_research_points(&self, country: &mut Country, month: u32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 295 |     pub fn add_to_queue(&mut self, tech_id: String) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn remove_from_queue(&mut self, tech_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 305 |     pub fn get_research_queue(&self) -> Vec<&String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 310 |     pub fn get_current_research(&self) -> Option<&String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 315 |     pub fn get_research_progress(&self, tech_id: &str) -> Option<f32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     pub fn get_available_technologies(&self) -> Vec<&Technology> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 337 |     pub fn get_researched_technologies(&self) -> Vec<&Technology> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 342 |     pub fn get_researching_technologies(&self) -> Vec<&ResearchProgress> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 347 |     pub fn set_research_speed(&mut self, speed: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 352 |     pub fn set_research_efficiency(&mut self, efficiency: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     pub fn set_research_focus(&mut self, category: TechnologyCategory, focus: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 363 |     pub fn get_research_focus(&self, category: TechnologyCategory) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 368 |     pub fn technology_tree(&self) -> &TechnologyTree {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 373 |     pub fn technology_tree_mut(&mut self) -> &mut TechnologyTree {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 378 |     pub fn has_technology(&self, tech_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 383 |     pub fn get_technology_bonus(&self, effect_type: TechnologyEffectType, target: &str) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     pub fn get_era_progress(&self, era: TechnologyEra) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 393 |     pub fn get_current_era(&self) -> TechnologyEra {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PredefinedTechTree` is never constructed
[INFO] [stdout]  --> src/server/technology/tree.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct PredefinedTechTree;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/server/technology/tree.rs:13:12
[INFO] [stdout]     |
[INFO] [stdout]  11 | impl PredefinedTechTree {
[INFO] [stdout]     | ----------------------- associated functions in this implementation
[INFO] [stdout]  12 |     /// 创建包含所有预定义科技的科技树
[INFO] [stdout]  13 |     pub fn create() -> Result<TechnologyTree> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  44 |     fn add_military_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     fn add_economic_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     fn add_industrial_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 435 |     fn add_social_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 500 |     fn add_political_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 535 |     fn add_transportation_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 576 |     fn add_communication_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 617 |     fn add_energy_technologies(tree: &mut TechnologyTree) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 35.65s
[INFO] running `Command { std: "docker" "inspect" "76bbcfa9c44d5318bfb67f0157f671f1585aee4537e2833859508cd5748734ad", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "76bbcfa9c44d5318bfb67f0157f671f1585aee4537e2833859508cd5748734ad", kill_on_drop: false }`
[INFO] [stdout] 76bbcfa9c44d5318bfb67f0157f671f1585aee4537e2833859508cd5748734ad
