Skip to main content

wx_sdk/mp/event/
msg_video.rs

1use roxmltree::Node;
2
3use crate::SdkResult;
4
5use super::{
6    xmlutil::{get_number_from_root, get_text_from_root},
7    ReceivedMessageParser,
8};
9
10pub struct VideoMessage {
11    pub msg_id: u64,
12    pub thumb_media_id: String,
13    pub media_id: String,
14}
15
16impl ReceivedMessageParser for VideoMessage {
17    type ReceivedMessage = VideoMessage;
18
19    fn from_xml(node: &Node) -> SdkResult<Self::ReceivedMessage> {
20        let msg_id = get_number_from_root::<u64>(node, "MsgId")?;
21        let media_id = get_text_from_root(node, "MediaId")?;
22        let thumb_media_id = get_text_from_root(node, "ThumbMediaId")?;
23
24        Ok(VideoMessage {
25            msg_id,
26            media_id: media_id.to_owned(),
27            thumb_media_id: thumb_media_id.to_owned(),
28        })
29    }
30}
31
32#[test]
33pub fn parse() -> SdkResult<()> {
34    use roxmltree::Document;
35    let s = "<xml>
36    <ToUserName><![CDATA[toUser]]></ToUserName>
37    <FromUserName><![CDATA[fromUser]]></FromUserName>
38    <CreateTime>1357290913</CreateTime>
39    <MsgType><![CDATA[video]]></MsgType>
40    <MediaId><![CDATA[media_id]]></MediaId>
41    <ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
42    <MsgId>1234567890123456</MsgId>
43  </xml>";
44    let node = Document::parse(&s)?;
45    let msg = VideoMessage::from_xml(&node.root())?;
46    assert_eq!(msg.media_id, "media_id");
47    assert_eq!(msg.thumb_media_id, "thumb_media_id");
48    assert_eq!(msg.msg_id, 1234567890123456);
49    Ok(())
50}