wecom_rs/client/contact/async_export/
mod.rs1use crate::Result;
2use async_trait::async_trait;
3use serde::{Deserialize, Serialize};
4
5#[async_trait]
6pub trait AsyncExporter {
7 async fn export_user_simple(&self, params: ParamsExport) -> Result<String>;
11 async fn export_user(&self, params: ParamsExport) -> Result<String>;
15 async fn export_department(&self, params: ParamsExport) -> Result<String>;
19 async fn export_tag_user(&self, params: ParamsExport) -> Result<String>;
23 async fn export_result_get(&self, job_id: &str) -> Result<ResponseExportResultGet>;
27}
28
29#[derive(Debug, Deserialize, Serialize, Default)]
31#[serde(rename_all = "PascalCase")]
32pub struct ExportCompleteNotify {
33 pub to_user_name: String,
35 pub from_user_name: String,
37 pub create_time: i64,
39 pub msg_type: String,
41 pub event: String,
43 pub batch_job: Option<BatchJob>,
44}
45
46#[derive(Debug, Deserialize, Serialize, Default)]
47#[serde(rename_all = "PascalCase", rename = "xml")]
48pub struct BatchJob {
49 pub job_id: String,
51 pub job_type: String,
57 pub err_code: i32,
59 pub err_msg: String,
61}
62
63mod dto;
64pub use dto::*;
65
66mod model;
67pub use model::*;
68
69#[cfg(test)]
70mod tests {
71 use super::*;
72 use anyhow::Result;
73 use quick_xml::de::from_str;
74
75 #[test]
76 fn test_parse_xml_evnet_export_complete_notify() -> Result<()> {
77 let xml_str = r#"<xml>
78<ToUserName><![CDATA[wx28dbb14e3720FAKE]]></ToUserName>
79<FromUserName><![CDATA[FromUser]]></FromUserName>
80<CreateTime>1425284517</CreateTime>
81<MsgType><![CDATA[event]]></MsgType>
82<Event><![CDATA[batch_job_result]]></Event>
83<BatchJob>
84 <JobId><![CDATA[jobid_S0MrnndvRG5fadSlLwiBqiDDbM143UqTmKP3152FZk4]]></JobId>
85 <JobType><![CDATA[export_user]]></JobType>
86 <ErrCode>0</ErrCode>
87 <ErrMsg><![CDATA[ok]]></ErrMsg>
88</BatchJob>
89</xml>"#;
90
91 let xml: ExportCompleteNotify = from_str(xml_str)?;
92 assert_eq!("ok", xml.batch_job.unwrap().err_msg);
93 Ok(())
94 }
95}