From 91b99050d16be2bbbdc30f6b714f6d49d3e7dd51 Mon Sep 17 00:00:00 2001 From: overlookmotel <557937+overlookmotel@users.noreply.github.com> Date: Mon, 14 Jul 2025 14:23:34 +0000 Subject: [PATCH] refactor(ast_tools): introduce `StructDef::field_by_name` method (#12267) Pure refactor. Add a method `StructDef::field_by_name` and remove repeated code by using it. --- tasks/ast_tools/src/generators/raw_transfer.rs | 4 ++-- tasks/ast_tools/src/schema/defs/struct.rs | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/tasks/ast_tools/src/generators/raw_transfer.rs b/tasks/ast_tools/src/generators/raw_transfer.rs index 538942a739a10..ce902a61fd8b4 100644 --- a/tasks/ast_tools/src/generators/raw_transfer.rs +++ b/tasks/ast_tools/src/generators/raw_transfer.rs @@ -811,12 +811,12 @@ impl Replacer for PosOffsetReplacer<'_, '_> { let mut field_names = caps.get(2).unwrap().as_str().split('.'); let field_name = field_names.next().unwrap(); - let field = struct_def.fields.iter().find(|field| field.name() == field_name).unwrap(); + let field = struct_def.field_by_name(field_name); let mut offset = self.struct_offset + field.offset_64(); let mut type_def = field.type_def(self.schema); for field_name in field_names { let struct_def = type_def.as_struct().unwrap(); - let field = struct_def.fields.iter().find(|field| field.name() == field_name).unwrap(); + let field = struct_def.field_by_name(field_name); offset += field.offset_64(); type_def = field.type_def(self.schema); } diff --git a/tasks/ast_tools/src/schema/defs/struct.rs b/tasks/ast_tools/src/schema/defs/struct.rs index fc3d023863f27..06b84059fe8f8 100644 --- a/tasks/ast_tools/src/schema/defs/struct.rs +++ b/tasks/ast_tools/src/schema/defs/struct.rs @@ -105,6 +105,14 @@ impl StructDef { pub fn field_indices(&self) -> Range { 0..self.fields.len() } + + /// Get reference to [`FieldDef`] for field called `name`. + /// + /// # Panics + /// Panics if struct does not have a field called `name`. + pub fn field_by_name(&self, name: &str) -> &FieldDef { + self.fields.iter().find(|field| field.name() == name).unwrap() + } } impl Def for StructDef {