fix(converter): wrong iterator usage

all iterator was consumed for searching value before collecting field
This commit is contained in:
Wataru Otsubo 2025-05-20 18:49:01 +09:00
parent e6f09d684a
commit 83e0c6cb3d
2 changed files with 8 additions and 4 deletions

View file

@ -390,13 +390,17 @@ impl Register {
let desc = node.attribute("desc").map(str::to_string);
let children: Vec<_> = {
let mut child_elements = node.children().filter(|node| node.is_element());
if child_elements.any(|node| node.tag_name().name().eq("value")) {
if node
.children()
.filter(|node| node.is_element())
.any(|node| node.tag_name().name().eq("value"))
{
// Generate virtual single field under the register, to absorb difference between
// normal format
vec![Field::from_xml_register_dom(node)?]
} else {
child_elements
node.children()
.filter(|node| node.is_element())
.filter(|node| node.tag_name().name().eq("field"))
.map(Field::from_xml_dom)
.collect::<Result<_, _>>()?

View file

@ -46,7 +46,7 @@ pub fn generate(xml: &path::Path, out: &path::Path) -> Result<(), Error> {
log::debug!("xml parsed {doc:?}");
let register_map = types::Module::from_xml_dom(doc.root_element(), xml_git_info)?;
log::debug!("converted {register_map:?}");
log::debug!("converted {register_map:#?}");
let (_maps, errors) = register_map.validate();
if !errors.is_empty() {