use roxmltree::Node;
use crate::{
mp::event::{
xmlutil::{get_node_by_tag, get_number_from_root, get_text_from_root},
ReceivedMessageParser,
},
SdkResult,
};
pub struct MassSendJobFinishEvent {
pub msg_id: u64,
pub status: String,
pub total_count: u64,
pub filter_count: u64,
pub sent_count: u64,
pub error_count: u64,
pub copyright_check_result: CopyrightCheckResult,
}
pub struct CopyrightCheckResult {
pub count: u16,
pub check_state: u8,
pub result_list: Vec<CopyrightCheckResultItem>,
}
pub struct CopyrightCheckResultItem {
pub article_idx: i8, pub user_declare_state: i8, pub audit_state: i8, pub original_article_url: String, pub original_article_type: i8, pub can_reprint: i8, pub need_replace_content: i8, pub need_show_reprint_source: i8, }
impl ReceivedMessageParser for MassSendJobFinishEvent {
type ReceivedMessage = MassSendJobFinishEvent;
fn from_xml(node: &roxmltree::Node) -> crate::SdkResult<Self::ReceivedMessage> {
let msg_id = get_number_from_root::<u64>(node, "MsgId")?;
let status = get_text_from_root(node, "Status")?;
let total_count = get_number_from_root::<u64>(node, "TotalCount")?;
let filter_count = get_number_from_root::<u64>(node, "FilterCount")?;
let sent_count = get_number_from_root::<u64>(node, "SentCount")?;
let error_count = get_number_from_root::<u64>(node, "ErrorCount")?;
let copyright_check = get_node_by_tag(node, "CopyrightCheckResult")?;
let copyright_count = get_number_from_root::<u16>(©right_check, "Count")?;
let copyright_check_state = get_number_from_root::<u8>(©right_check, "CheckState")?;
let copyright_result_list = get_node_by_tag(©right_check, "ResultList")?;
let copyright_result_list: Vec<Node> = copyright_result_list
.descendants()
.filter(|n| n.has_tag_name("item"))
.collect();
let copyright_result_list: SdkResult<Vec<CopyrightCheckResultItem>> = copyright_result_list
.iter()
.map(|n| {
let article_idx = get_number_from_root::<i8>(n, "ArticleIdx")?;
let user_declare_state = get_number_from_root::<i8>(n, "UserDeclareState")?;
let audit_state = get_number_from_root::<i8>(n, "AuditState")?;
let original_article_url = get_text_from_root(n, "OriginalArticleUrl")?;
let original_article_type = get_number_from_root::<i8>(n, "OriginalArticleType")?;
let can_reprint = get_number_from_root(n, "CanReprint")?;
let need_replace_content = get_number_from_root(n, "NeedReplaceContent")?;
let need_show_reprint_source = get_number_from_root(n, "NeedShowReprintSource")?;
Ok(CopyrightCheckResultItem {
article_idx,
user_declare_state,
audit_state,
original_article_url: original_article_url.to_owned(),
original_article_type,
can_reprint,
need_replace_content,
need_show_reprint_source,
})
})
.collect();
let copyright_result_list = copyright_result_list?;
let copyright_check_result = CopyrightCheckResult {
count: copyright_count,
check_state: copyright_check_state,
result_list: copyright_result_list,
};
Ok(MassSendJobFinishEvent {
msg_id,
status: status.to_string(),
total_count,
filter_count,
sent_count,
error_count,
copyright_check_result,
})
}
}
pub struct TemplateSendJobFinishEvent {
pub msg_id: u64,
pub status: String,
}
impl ReceivedMessageParser for TemplateSendJobFinishEvent {
type ReceivedMessage = TemplateSendJobFinishEvent;
fn from_xml(node: &Node) -> SdkResult<Self::ReceivedMessage> {
let msg_id = get_number_from_root::<u64>(node, "MsgId")?;
let status = get_text_from_root(node, "Status")?;
Ok(TemplateSendJobFinishEvent {
msg_id,
status: status.to_string(),
})
}
}