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 {