#[macro_export] macro_rules! parse_property_test { ($type:ident, $input:expr, $expected_output:expr) => {{ let doc = roxmltree::Document::parse($input).unwrap(); let elem = doc.root_element(); assert_eq!($type::from_xml(elem).unwrap(), $expected_output); }}; } #[macro_export] macro_rules! get_attribute { ($node:expr, $attribute_name:expr) => {{ let node: &roxmltree::Node = &$node; let attribute_name: &str = $attribute_name; node.attribute(attribute_name) .ok_or(anyhow!("{} attribute missing", attribute_name)) }}; } #[macro_export] macro_rules! ensure_element { ($node:expr) => { if $node.node_type() != roxmltree::NodeType::Element { return Err(anyhow!("xml -> node is not an element")); } }; } #[macro_export] macro_rules! ensure_tag_name { ($node:expr, $tag_name:expr) => { if !$node.has_tag_name($tag_name) { return Err(anyhow!("xml -> node is not an '{}' element ", $tag_name)); } }; }