diff options
Diffstat (limited to 'src/lowlevel/macros.rs')
-rw-r--r-- | src/lowlevel/macros.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/lowlevel/macros.rs b/src/lowlevel/macros.rs new file mode 100644 index 0000000..7568161 --- /dev/null +++ b/src/lowlevel/macros.rs @@ -0,0 +1,38 @@ +use anyhow::anyhow; + +#[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)); + } + }; +} |