wx-sdk 0.0.9

A Wechat SDK written in Rust
Documentation
use roxmltree::Node;

use crate::{error::SdkError, SdkResult};

pub fn get_node_by_tag<'a, 'b>(node: &'a Node, tag_name: &'b str) -> SdkResult<Node<'a, 'a>> {
    node.descendants()
        .find(|n| n.has_tag_name(tag_name))
        .ok_or_else(|| {
            SdkError::InvalidParams(format!(
                "Parse XML msg from wechat error: tag `{}` invalid",
                tag_name
            ))
        })
}

pub fn get_text_from_root<'a>(node: &Node<'a, 'a>, tag_name: &str) -> SdkResult<&'a str> {
    node.descendants()
        .find(|n| n.has_tag_name(tag_name))
        .map(|n| n.text())
        .flatten()
        .ok_or_else(|| {
            SdkError::InvalidParams(format!(
                "Parse XML msg from wechat error: tag `{}` text content is none",
                node.tag_name().name()
            ))
        })
}

pub fn get_number_from_root<'a, T: std::str::FromStr>(
    node: &Node<'a, 'a>,
    tag_name: &str,
) -> SdkResult<T> {
    node.descendants()
        .find(|n| n.has_tag_name(tag_name))
        .map(|n| n.text())
        .flatten()
        .map(|s| s.parse::<T>().ok())
        .flatten()
        .ok_or_else(|| {
            SdkError::InvalidParams(format!(
                "Parse XML msg from wechat error: tag `{}` should be number",
                tag_name
            ))
        })
}