From 0ff90c432920735660cad1c6ff3fd5774cae222c Mon Sep 17 00:00:00 2001 From: boris Date: Sun, 13 Sep 2026 09:55:15 +0800 Subject: [PATCH] refactor(data): use explicit string views for compact numeric names --- crates/fidc-core/src/data.rs | 8 ++++---- crates/fidc-core/src/numeric_factors.rs | 10 +++++----- crates/fidc-core/src/platform_expr_strategy.rs | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/crates/fidc-core/src/data.rs b/crates/fidc-core/src/data.rs index 6200e38..82dd92d 100644 --- a/crates/fidc-core/src/data.rs +++ b/crates/fidc-core/src/data.rs @@ -4390,9 +4390,9 @@ fn normalize_factor_snapshots( }); } let already_normalized = snapshot.extra_factors.iter().all(|(field, value)| { - let trimmed = field.as_ref().trim().trim_matches('"').trim_matches('\''); + let trimmed = field.as_str().trim().trim_matches('"').trim_matches('\''); !trimmed.is_empty() - && trimmed == field.as_ref() + && trimmed == field.as_str() && trimmed.bytes().all(|byte| !byte.is_ascii_uppercase()) && value.is_finite() }); @@ -4403,10 +4403,10 @@ fn normalize_factor_snapshots( .extra_factors .into_iter() .filter_map(|(field, value)| { - let trimmed = field.as_ref().trim().trim_matches('"').trim_matches('\''); + let trimmed = field.as_str().trim().trim_matches('"').trim_matches('\''); if trimmed.is_empty() || !value.is_finite() { None - } else if trimmed == field.as_ref() + } else if trimmed == field.as_str() && trimmed.bytes().all(|byte| !byte.is_ascii_uppercase()) { Some((field, value)) diff --git a/crates/fidc-core/src/numeric_factors.rs b/crates/fidc-core/src/numeric_factors.rs index 81ac5a6..f89bba9 100644 --- a/crates/fidc-core/src/numeric_factors.rs +++ b/crates/fidc-core/src/numeric_factors.rs @@ -40,14 +40,14 @@ impl NumericFactorMap { pub fn get(&self, key: &str) -> Option<&f64> { self.entries - .binary_search_by(|(name, _)| name.as_ref().cmp(key)) + .binary_search_by(|(name, _)| name.as_str().cmp(key)) .ok() .map(|index| &self.entries[index].1) } pub fn get_mut(&mut self, key: &str) -> Option<&mut f64> { self.entries - .binary_search_by(|(name, _)| name.as_ref().cmp(key)) + .binary_search_by(|(name, _)| name.as_str().cmp(key)) .ok() .map(|index| &mut self.entries[index].1) } @@ -64,14 +64,14 @@ impl NumericFactorMap { if self .entries .last() - .is_none_or(|(last, _)| last.as_ref() < key.as_ref()) + .is_none_or(|(last, _)| last.as_str() < key.as_str()) { self.entries.push((key, value)); return None; } match self .entries - .binary_search_by(|(name, _)| name.as_ref().cmp(key.as_ref())) + .binary_search_by(|(name, _)| name.as_str().cmp(key.as_str())) { Ok(index) => Some(std::mem::replace(&mut self.entries[index].1, value)), Err(index) => { @@ -83,7 +83,7 @@ impl NumericFactorMap { pub fn remove(&mut self, key: &str) -> Option { self.entries - .binary_search_by(|(name, _)| name.as_ref().cmp(key)) + .binary_search_by(|(name, _)| name.as_str().cmp(key)) .ok() .map(|index| self.entries.remove(index).1) } diff --git a/crates/fidc-core/src/platform_expr_strategy.rs b/crates/fidc-core/src/platform_expr_strategy.rs index 35fe906..1f9d471 100644 --- a/crates/fidc-core/src/platform_expr_strategy.rs +++ b/crates/fidc-core/src/platform_expr_strategy.rs @@ -4905,7 +4905,7 @@ impl PlatformExprStrategy { .iter() .filter(|(field, _)| { self.stock_extra_factor_map_required - || self.stock_extra_factor_identifiers.contains(field.as_ref()) + || self.stock_extra_factor_identifiers.contains(field.as_str()) }) .map(|(field, value)| (field.clone(), *value)) .collect() @@ -5653,7 +5653,7 @@ impl PlatformExprStrategy { Dynamic::from(stock.stock_volume_ma100), ); for (key, value) in &stock.extra_factors { - factors.insert(key.as_ref().into(), Dynamic::from(*value)); + factors.insert(key.as_str().into(), Dynamic::from(*value)); } for (key, value) in &stock.extra_text_factors { factors.insert(key.clone().into(), Dynamic::from(value.clone())); @@ -17561,7 +17561,7 @@ mod tests { assert_eq!(copied_state.extra_factors["negative_zero"].to_bits(), (-0.0_f64).to_bits()); assert!(copied_state.extra_factors["undefined_value"].is_nan()); let exposed = copied_state.extra_factors.iter() - .map(|(key, value)| (key.as_ref().into(), Dynamic::from(*value))) + .map(|(key, value)| (key.as_str().into(), Dynamic::from(*value))) .collect::(); assert_eq!(exposed["negative_zero"].as_float().unwrap().to_bits(), (-0.0_f64).to_bits()); assert!(exposed["undefined_value"].as_float().unwrap().is_nan());