//! GNACS解析器模块 /// 资产类型 #[derive(Debug, Clone, PartialEq, Eq)] pub enum AssetType { /// 不动产收益权 RealEstateRevenue, /// 股权 Equity, /// 债权 Debt, /// 商品 Commodity, /// 其他 Other(String), } /// 风险等级 #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] #[repr(u8)] pub enum RiskLevel { /// 低风险 Low = 1, /// 中风险 Medium = 2, /// 高风险 High = 3, } /// GNACS解析结果 #[derive(Debug, Clone)] pub struct GNACSInfo { /// 资产类型 pub asset_type: AssetType, /// 风险权重(巴塞尔III) pub risk_weight: u8, /// 合规等级 pub compliance_level: u8, /// 实时状态 pub status: u8, } /// GNACS解析器 pub struct GNACSParser; impl GNACSParser { /// 解析GNACS编码 pub fn parse(gnacs: &[u8; 6]) -> GNACSInfo { let asset_type_code = gnacs[0]; let risk_weight = gnacs[1]; let compliance_level = gnacs[2]; let status = gnacs[5]; let asset_type = match asset_type_code { 0x01 => AssetType::RealEstateRevenue, 0x02 => AssetType::Equity, 0x03 => AssetType::Debt, 0x04 => AssetType::Commodity, _ => AssetType::Other(format!("Unknown({})", asset_type_code)), }; GNACSInfo { asset_type, risk_weight, compliance_level, status, } } /// 获取资产类型描述 pub fn asset_type_description(asset_type: &AssetType) -> String { match asset_type { AssetType::RealEstateRevenue => "不动产收益权".to_string(), AssetType::Equity => "股权".to_string(), AssetType::Debt => "债权".to_string(), AssetType::Commodity => "商品".to_string(), AssetType::Other(s) => s.clone(), } } /// 获取风险等级 pub fn risk_level(risk_weight: u8) -> RiskLevel { match risk_weight { 0..=50 => RiskLevel::Low, 51..=100 => RiskLevel::Medium, _ => RiskLevel::High, } } }