wx_sdk/mp/event/
msg_video.rs1use 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}