| 275 | } |
| 276 | |
| 277 | fn build_field_index(fields: &Fields) -> Option<HashMap<String, usize>> { |
| 278 | // Heuristic threshold: for small field counts, linear scan avoids HashMap overhead. |
| 279 | const FIELD_INDEX_LINEAR_THRESHOLD: usize = 16; |
| 280 | if fields.len() < FIELD_INDEX_LINEAR_THRESHOLD { |
| 281 | return None; |
| 282 | } |
| 283 | |
| 284 | let mut map = HashMap::with_capacity(fields.len()); |
| 285 | for (idx, field) in fields.iter().enumerate() { |
| 286 | let name = field.name(); |
| 287 | if !map.contains_key(name) { |
| 288 | map.insert(name.to_string(), idx); |
| 289 | } |
| 290 | } |
| 291 | Some(map) |
| 292 | } |