diff --git a/CHANGELOG.md b/CHANGELOG.md index e8fb5f4..5212799 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Packagin with Nix flakes (with nixpkgs buildRustPackage) [!16](https://gitlab.cern.ch/wotsubo/endcap-sl-software-ri-generator/-/merge_requests/16) - Now xml metadata can be overwritten with corresponding environmental variables. [!17](https://gitlab.cern.ch/wotsubo/endcap-sl-software-ri-generator/-/merge_requests/17) -- Support value element just under the register element by inserting single field during conversion. [!18](https://gitlab.cern.ch/wotsubo/endcap-sl-software-ri-generator/-/merge_requests/18) ### Changed diff --git a/src/converter.rs b/src/converter.rs index 2fcc4a4..27d78b0 100644 --- a/src/converter.rs +++ b/src/converter.rs @@ -389,23 +389,11 @@ impl Register { .transpose()?; let desc = node.attribute("desc").map(str::to_string); - let children: Vec<_> = { - 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 { - node.children() - .filter(|node| node.is_element()) - .filter(|node| node.tag_name().name().eq("field")) - .map(Field::from_xml_dom) - .collect::>()? - } - }; + let children: Vec<_> = node + .children() + .filter(|node| node.is_element() && node.tag_name().name().eq("field")) + .map(Field::from_xml_dom) + .collect::>()?; // Validation if default.is_some() && !children.is_empty() { @@ -517,53 +505,6 @@ impl Field { elements: children, }) } - - /// Generate virtual Field from Registers node (piracy), guessing a lot of parameters. - pub(crate) fn from_xml_register_dom(node: Node) -> Result { - // // Prepend "val_" to avoid name confliction with struct for accessing values - // let name = "val_".to_string() + &util::get_name(node)?; - let name = "field".to_string(); - let mask = match node.attribute("mask") { - Some(mask) => mask - .parse_prefixed_u32() - .map_err(|e| DomConversionError::parse_prefixed_u32_error(e, "mask", node))?, - None => node - .ancestors() - .filter_map(|node| util::get_type(node)) - .next() - .transpose()? - .map_or_else( - || Err(DomConversionError::parameter_completion_error("type", node)), - |dtype| match dtype { - crate::types::DataType::D32 => Ok(u32::MAX), - }, - )?, - }; - if node.has_attribute("default") { - return Err(DomConversionError::other_error( - "unsupported structure: register with @default without field", - node, - )); - } - // Duplicated with parent (register) desc so should be removed, or add some comment? - let desc = node.attribute("desc").map(str::to_string); - let children = node - .children() - .filter(|node| node.is_element()) - .map(Value::from_xml_dom) - .collect::>()?; - - Ok(Field { - name, - mask, - interface: None, - multiple: None, - default: None, - sclr: None, - desc, - elements: children, - }) - } } impl Value { diff --git a/src/integrated.rs b/src/integrated.rs index 0d64ee8..341c448 100644 --- a/src/integrated.rs +++ b/src/integrated.rs @@ -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() {