summaryrefslogtreecommitdiff
path: root/src/lowlevel/macros.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lowlevel/macros.rs')
-rw-r--r--src/lowlevel/macros.rs38
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));
+ }
+ };
+}