summaryrefslogtreecommitdiff
path: root/src/lowlevel/macros.rs
blob: 7568161daa3f8d71e67d9efded88ca0de26b15fd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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));
        }
    };
}