//! L5 价值层: XIC/XTZH跨文明价值交换 use crate::types::{CivilizationId, ValueExchangeMessage}; use crate::error::Result; use tracing::info; use std::collections::HashMap; /// 跨文明价值交换器 pub struct CrossCivilizationValueExchanger { /// 汇率表 (from_civ, to_civ) -> rate exchange_rates: HashMap<(CivilizationId, CivilizationId), f64>, } impl CrossCivilizationValueExchanger { pub fn new() -> Self { info!("Creating CrossCivilizationValueExchanger"); Self { exchange_rates: HashMap::new(), } } /// 创建价值交换消息 pub fn create_exchange( &self, from: CivilizationId, to: CivilizationId, value_type: String, amount: u128, ) -> Result { let rate = self.get_exchange_rate(&from, &to); let converted_amount = (amount as f64 * rate) as u128; Ok(ValueExchangeMessage { from_civilization: from, to_civilization: to, value_type, amount, converted_amount, exchange_rate: rate, timestamp: Self::current_timestamp(), }) } /// 获取汇率 pub fn get_exchange_rate(&self, from: &CivilizationId, to: &CivilizationId) -> f64 { self.exchange_rates .get(&(from.clone(), to.clone())) .copied() .unwrap_or(1.0) } /// 设置汇率 pub fn set_exchange_rate(&mut self, from: CivilizationId, to: CivilizationId, rate: f64) { self.exchange_rates.insert((from, to), rate); } /// 执行价值交换 pub fn execute_exchange(&self, message: &ValueExchangeMessage) -> Result { info!("Executing value exchange from {:?} to {:?}, amount: {}", message.from_civilization, message.to_civilization, message.amount); // TODO: 实际的价值转移逻辑 Ok(true) } } impl CrossCivilizationValueExchanger { fn current_timestamp() -> u64 { use std::time::{SystemTime, UNIX_EPOCH}; SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() .as_secs() } } impl Default for CrossCivilizationValueExchanger { fn default() -> Self { Self::new() } }